Angular单元测试FormBuilder服务

问题描述

我已经编写了一项服务来检查表单值是否已更改,以便可以像下面那样更新markAsPrisitine

export class FormStateService implements OnDestroy{
  subscription = new Subscription();

  constructor() { }

  ngOnDestroy(): void {
    this.subscription.unsubscribe();
  }

  isFormPrisitine(formName: FormGroup) {
    console.log('form',formName);
    const defaultValue = formName.value;
    const observer = formName.valueChanges
      .pipe(debounceTime(200))
      .subscribe(value => {
        if (JSON.stringify(defaultValue) === JSON.stringify(value)) {
          return formName.markAsPristine();
        }
      });
    this.subscription.add(observer);
  }

}

对于上述服务,我编写了如下所示的规范,但规范的问题是如何检查formValue是否更改。有人可以告诉我如何模拟formvalue更改

describe('Service: FormState',() => {
  let service: FormStateService;
  let formGroupMock: FormGroup;
  let formBuilderMock: any;

  beforeEach(() => {
    Testbed.configureTestingModule({
      providers: [FormStateService]
    });
    service = Testbed.inject(FormStateService);
    formGroupMock = new FormGroup({
      field : new FormControl()
    });
    formBuilderMock = jasmine.createSpyObj('FormBuilder',['group']);
    formBuilderMock.group.and.returnValue(formGroupMock);
  });

  it('should instantiate the service',() => {
    expect(service).toBeTruthy();
  });

  it('it should make',() => {
    formGroupMock.patchValue({
      field: {
        name: 'test1',age: '11'
      }
    });
    spyOn(service,'isFormPrisitine').and.callThrough();
    service.isFormPrisitine(formGroupMock);

    expect(service.isFormPrisitine).toHaveBeenCalled();
  });
});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)