我正在測試服務(myService
)在Angular 2中依賴於Router
。由於我使用了Angular的一個組件,因此我將使用Angular的TestBed
類。所以,我建立了我的beforeEach
如下:Angular2 TestBed Inject
let router: Router;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
{provide: Router, useClass: RouterStub}
]
});
router = TestBed.get(Router);
myService = new MyService(router);
}));
爲
@Injectable()
export class RouterStub {
navigate() {};
}
現在,我寫我的測試失敗,其中RouterStub
定義(紅,綠,重構......)
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
相同的實例。我不瞭解什麼?
你有沒有試着用'RouterModule.forRoot()'在'TestBed'?路由器服務不會,如果你注入不要調用'forRoot()'。但這只是一個長時間的拍攝。 –
@camaron好想法,但不幸的是沒有解決它。似乎很奇怪,只能假設我錯過了一些東西。 –