我正在myService
Angular 2 中测试一个依赖于Router
. 由于我使用的是 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
函数会Router
从TestBed
. 我不明白什么?