phy*_*boy 4 testing unit-testing karma-jasmine angular
我如何简单地测试我的服务是否被调用?
myComp.ts
constructor(private myService: MyService) {}
myFunction() {
this.myService.someFunction();
}
Run Code Online (Sandbox Code Playgroud)
myTest.ts
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ReactiveFormsModule, FormsModule, HttpClientModule],
declarations: [MyComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should delete customer feed', () => {
const mySpy = spyOn(MyService, 'someFunction');
component.myFunction();
expect(mySpy).toHaveBeenCalledTimes(1);
});
Run Code Online (Sandbox Code Playgroud)
目前,该行const mySpy = spyOn(MyService, 'someFunction');显示红色波浪线,'someFunction'表示:
“someFunction”类型的参数不可分配给原型类型的参数 | 服务 | 网址
根据评论更新 我的设置现在如何:
let myService: MyService;
beforeEach(() => {
...
providers: [MyService],
...
.compileComponents()
});
beforeEach(() => {
fixture = TesBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
myService = TestBed.get(MyService);
});
Run Code Online (Sandbox Code Playgroud)
更新(解决方案) 我仍然在我的间谍定义中使用大写 MyService 而不是小写 myService!
您可以简单地继续spyOn您的服务方法以查看它是否被调用。您应该模拟该服务并将其提供给 TestBedConfiguration 中的组件。
您可以模拟所有服务方法并根据需要返回任何值,以检查是否调用了您的服务方法。
class MyServiceStub {
constructor(){}
myFunction() { returns Observable.of({});}
}
let myService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ReactiveFormsModule, FormsModule, HttpClientModule],
providers: [
{ provide: MyService, useValue: new MyServiceStub() }
],
schemas: [NO_ERRORS_SCHEMA]
declarations: [MyComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
myService = TestBed.get(MyService);
});
it('should delete customer feed', () => {
const mySpy = spyOn(myService , 'someFunction');
component.myFunction();
expect(mySpy).toHaveBeenCalledTimes(1);
});
Run Code Online (Sandbox Code Playgroud)
如果您不想使用存根来模拟您的服务,只需TestBed.get(MyService)在向组件提供服务后使用它来获取服务实例TestBed.configureTestingModule
| 归档时间: |
|
| 查看次数: |
9192 次 |
| 最近记录: |