简体   繁体   English

Angular 中服务的单元测试

[英]Unit testing for service in Angular

I am trying to create unit testing for service I have import data service in spec file.我正在尝试为我在规范文件中导入数据服务的服务创建单元测试。

Then I am calling in beforeach Method.然后我调用 beforeach 方法。

 providers: [
    { provide: dataservice}    
  ],

I am getting this error我收到此错误

TypeError: Cannot read property 'setNumber' of undefined

this.dataService.setNumber(null);

As per the below user I added根据我添加的以下用户

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

in before each在每个之前

How to get rid of this error I am trying like below i am getting error and i modifed this into如何摆脱这个错误我正在尝试如下我收到错误,我将其修改为

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

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

but still I am getting the same error.但我仍然遇到同样的错误。

You must provide the class instead of the instance.您必须提供类而不是实例。 if you want to provide a instance, you must use useValue like this:如果你想提供一个实例,你必须像这样使用useValue

{
  provide: DataService,
  useValue: dataServiceMock
}

Also, expect is on an instance, not a class, hence此外,expect 是在一个实例上,而不是一个类上,因此

expect(DataService).setNumber;

should be应该

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

You also need to set the dataServiceMock to a mock instance like in the example:您还需要将 dataServiceMock 设置为模拟实例,如示例中所示:

let dataServiceMock: jasmine.SpyObj<DataService>;

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

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

I recommand you the official angular site for testing: https://angular.io/guide/testing-services我推荐你官方 angular 站点进行测试: https : //angular.io/guide/testing-services

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM