我正在测试Angular 2中依赖于Router的服务(myService)。因为我使用的是Angular的一个组件,所以我将使用Angular的TestBed类。所以我设置我的beforeEach如下:
let router: Router;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
{provide: Router, useClass: RouterStub}
]
});
router = TestBed.get(Router);
myService = new MyService(router);
}));其中RouterStub定义为
@Injectable()
export class RouterStub {
navigate() {};
}现在我写我的测试失败(红色,绿色,重构...)
it('on myServiceMethod calls router', () => {
let spy = spyOn(router, 'navigate');
// myService.myServiceMethod(); // commented out so test fails
expect(spy).toHaveBeenCalledTimes(1);
})正如预期的那样,测试失败。但是,我现在尝试使用TestBed Inject函数编写相同的测试,即
it('on myServiceMethod calls router', () => {
inject([Router], (router: Router) => {
let spy = spyOn(router, 'navigate');
// myService.myServiceMethod(); // commented out so test fails
expect(spy).toHaveBeenCalledTimes(1);
})
})尽管我认为Inject函数会从TestBed中检索到相同的Router实例,但这个测试还是通过了。我有什么不明白的吗?
发布于 2017-03-06 02:37:17
配对它你应该使用@angular/core/testing的getTestBed并像这样注入它,
getTestBed().get(YourService)https://stackoverflow.com/questions/42611956
复制相似问题