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 进行角度单元测试时出错