Angular Jasmine单元测试。类型错误:this.sitesTable.renderRows不是一个函数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular Jasmine单元测试。类型错误:this.sitesTable.renderRows不是一个函数。相关的知识,希望对你有一定的参考价值。

我在AngularJasmineKarma的简单单元测试中出现了以下错误。

TypeError: this.sitesTable.renderRows is not a function

我在NgForm里面有一个mat-table,我想测试重置Form和renderRrows的方法,但是出现了这个错误。我想测试我重置表格和renderRows的方法,但是它抛出了这个错误。在正常的 "非测试环境 "中,它可以工作。

测试。

it('should reset Form when resetForm invoked', () => 
    spyOn(component.studyForm, 'resetForm');
    component.resetForm();
    expect(component.studyForm.resetForm).toHaveBeenCalledTimes(1);
  );

测试方法。

resetForm()
    this.studyForm.resetForm();
    this.ngOnInit();
    this.sitesTable.renderRows();
  

我可以请你帮助我或给我文章链接或任何有用的东西吗?

谢谢你的帮助

答案

试着在你的测试中实例一个新的MatTable,并设置为component.sitesTable.这可能是ViewChild没有在你的测试中重新获取MatTable实例。这将是一个简单的解决方案。然后你可以监视renderRows方法。

祝你好运!我找到了解决方案,我认为它可以解决这个问题。

另一答案

我找到了一个解决方案,我想它对有同样问题的人有帮助。

解决方法:添加MaterialModule和BrowserAnimation。在测试文件中添加MaterialModule和BrowserAnimationsModule。

解决方案描述

我看了Angular关于TestBed的文档https:/angular.ioguidetesting。如果我的理解是正确的TestBed.configureTestingModule()创建完全分离的模块版本,所以在我的例子中,我有2个模块,AppModule和TestBed(类似AppModuleTest的东西)。AppModule和TestBed(类似AppModuleTest)

在这种情况下,应该在两个模块中添加MaterialModule.BrowserAnimationsModule也应该导入以启用MaterialModule。

如果有更有经验的人能够纠正我或者补充一些东西,我会非常感谢。

以上是关于Angular Jasmine单元测试。类型错误:this.sitesTable.renderRows不是一个函数。的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jasmine 进行 Angular 单元测试:如何删除或修改 spyOn

使用 jasmine 和 karma 进行单元测试时形成数组错误

如何使用 Jasmine 为私有方法编写 Angular / TypeScript 单元测试

使用 Jasmine 和 Karma 进行角度单元测试时出错

在 Angular 中使用 Jasmine 使用 *ngIf 指令时,如何对元素是不是可见进行单元测试

Jasmine 使用 Angular 中的 TypeScript 对文件大小进行单元测试