【发布时间】:2018-07-16 02:59:57
【问题描述】:
我的 Componenet MaintainCOCComponent 构造函数有一个 MaintainCOCService 的参数,它具有 API 调用方法服务。
export class MaintainCOCComponent {
constructor(
private maintaincocservice: MaintainCOCService) { }
}
构造函数注入:
在这里我已经配置了 testBed 并通过提供者注入了一个模拟 MockMaintainCOCService 服务
TestBed.configureTestingModule({
imports: [FormsModule, RouterTestingModule.withRoutes([])],
declarations: [MaintainCOCComponent],
providers: [
{ provide: MaintainCOCService, useClass: MockMaintainCOCService }]
});
SpyOn 注入
在这里,我使用 SpyOn 模拟了真正的服务。
providers: [
{ provide: MaintainCOCService, useClass:MaintainCOCService }]
_maintainCOCService = fixture.componentRef.injector.get(MaintainCOCService);
spyOn(_maintainCOCService , 'Method1')
.and.callFake(function (key, value) {
return 1;
});
spyOn(_maintainCOCService , 'Method2')
.and.callFake(function (key, value) {
return 2;
});
我们可以直接在provider中传递mock服务,而不是使用spyon来模拟每一个方法。那么我们要在哪个场景使用构造函数注入,在哪个场景使用Spyon注入呢?哪一个最好?
【问题讨论】:
标签: javascript angular unit-testing typescript jasmine