【问题标题】:Testing If FormBuilder has called the method group on NgOnInit()测试 FormBuilder 是否调用了 NgOnInit() 上的方法组
【发布时间】:2021-05-29 11:08:42
【问题描述】:

我是角度和角度测试的新手,我已经阅读了许多关于 jasmine 测试 formBuilder 的文章,但没有得到太多帮助。
假设我有以下代码

ngOnInit(): void {
  this.someForm = this.formBuilder.group({
    formField1: [null, Validators.required],
    formField2: [null, Validators.required],
    formField3: [null, Validators.required]
  });
}

现在我想测试 formBuilder 上的组方法 是否被调用。我怎样才能在 Jasmine Angular 中做到这一点? 我已经尝试了以下代码,但它不起作用:

beforeEach(() => {
  fixture = TestBed.createComponent(ChangePasswordComponent);
  formBuilder = TestBed.inject(FormBuilder);
  component = fixture.componentInstance;
  fixture.detectChanges();
});


it('on ngOnit_ FormBuilder object should call group method', () => {
  fixture.detectChanges();
  const spyObject =  spyOn(formBuilder, 'group');
  fixture.detectChanges();
  expect(spyObject).toHaveBeenCalled();
});

【问题讨论】:

    标签: angular typescript jasmine karma-jasmine


    【解决方案1】:

    ngOnInit 在组件创建后首次调用 fixture.detectChanges 时被调用(此处为 beforeEach)!

    因此,当您在调用 Angular 生命周期挂钩后监视表单构建器服务时,没有调用表单构建器的 group 方法。

    解决方案: 由于ngOnInit只是一个angular调用的方法,你可以自己再次调用并断言。

    const spyObject = spyOn(formBuilder, 'group');
    component.ngOnInit();
    fixture.detectChanges();
    expect(spyObject).toHaveBeenCalled();
    

    【讨论】:

    • 我试过这个,我收到一个错误,比如“formGroup 需要一个 FormGroup 实例。请传入一个。”
    • 您使用的表单组的标记是什么?我的回答只是说明你最初的方法出了什么问题。您可以针对当前问题提出新问题或将其发布为对当前问题的编辑。
    • 不确定您的代码是如何组织的,但您是否尝试*ngIf="formGroup" 绑定formGroup。
    • 这是我使用的:
    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多