0

我正在myServiceAngular 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函数会RouterTestBed. 我不明白什么?

4

1 回答 1

0

配合它你应该使用getTestBed@angular/core/testing注入它,

  getTestBed().get(YourService)
于 2017-03-05T18:37:16.563 回答