服务单元测试-角度

时间:2020-09-16 17:02:51

标签: angular unit-testing jasmine karma-jasmine

我正在尝试为在规范文件中导入数据服务的服务创建单元测试。

然后我要调用beforeach方法。

 providers: [
    { provide: dataservice}    
  ],

我收到此错误

TypeError:无法读取未定义的属性“ setNumber”

this.dataService.setNumber(null);

根据我添加的以下用户

const spyDataService = jasmine.createSpyObj('DataService', ['setNumber '])

在每个之前

如何摆脱这个错误,我尝试如下所示,但我遇到了错误,并将其修改为

  it('should be create data service', () => {    
     expect(DataService).setNumber;
    });

  it('should be create data service', () => {
    expect(service.setBCNumber).toHaveBeenCalledWith(null);
  }); 

但我仍然遇到相同的错误

在此先感谢您

1 个答案:

答案 0 :(得分:0)

您必须提供类而不是实例。如果要提供实例,则必须像这样使用useValue

{
  provide: DataService,
  useValue: dataServiceMock
}

此外,期望是在实例上,而不是类上,因此

expect(DataService).setNumber;

应该是

expect(dataService.setNumber).toHaveBeenCalledWith(null);

您还需要像示例中一样将dataServiceMock设置为模拟实例:

let dataServiceMock: jasmine.SpyObj<DataService>;

beforeEach(() => {
  const spyDataService = jasmine.createSpyObj('DataService', ['setNumber ']);

...
    {
      provide: DataService,
      useValue: spyDataService
    }
...

我建议您使用官方角度网站进行测试: https://angular.io/guide/testing-services