如何在Angular 8中对给定代码进行单元测试
我正在尝试对下面的代码执行单元测试如何在Angular 8中对给定代码进行单元测试,angular,unit-testing,karma-jasmine,Angular,Unit Testing,Karma Jasmine,我正在尝试对下面的代码执行单元测试 applyFilter(filterValue: string) { this.dataSource.filter = filterValue.trim().toLowerCase(); this.DMDataSource.filter = filterValue.trim().toLowerCase(); // console.log(this.dataSource.filter); } 这是我的规格代码 it('apply f
applyFilter(filterValue: string) {
this.dataSource.filter = filterValue.trim().toLowerCase();
this.DMDataSource.filter = filterValue.trim().toLowerCase();
// console.log(this.dataSource.filter);
}
这是我的规格代码
it('apply filter', () => {
spyOn(component, 'applyFilter');
component.applyFilter('filterValue');
expect(component.applyFilter);
})
仍然在浏览器中,显示代码以红色突出显示,这意味着它未被覆盖。我做错了什么?要测试一个方法,需要检查其执行结果。通过监视它,你可以阻止它被处决。更好的方法是执行该方法并检查结果。 在一个
It
块中只有一个期望也是一个很好的实践。使测试更易于维护
describe('applyFilter' ()=> {
it('should set the dataSource filter to the provided argument' ()=> {
component.applyFilter('filterValue');
expect(this.dataSource.filter).toEqual('filterValue');
})
it('should set the dataSource filter to the provided argument' ()=> {
component.applyFilter('filterValue');
expect(this.DMDataSource.filter).toEqual('filterValue');
})
// test for trimming and lower case to here
})
如果您正在监视一个函数,那么内部的任何内容都不会执行,因此测试不会覆盖该内容。要理解您要测试的内容有点困难。你目前正在做的所有测试,都是测试你的spyOn是否工作,方法是否存根。您需要对dataSource和DMDatasource进行存根,并测试是否设置了筛选器,而不是模拟实际的applyFilter方法。感谢立即回复,请让我知道我与cooments之间的关系以及如何执行大写错误。我收到一个错误类型错误:this.dataService.setBCNumber不是函数这是类型脚本this.dataService.setBCNumber(null);