Angular2测试床注入



我正在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的同一实例,该测试也通过。我不理解什么?

搭配它应该使用 @angular/core/testing中的 getTestBed,然后将其注入

  getTestBed().get(YourService)

最新更新