如何在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);