首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular2 TestBed注入

Angular2 TestBed注入
EN

Stack Overflow用户
提问于 2017-03-06 02:01:10
回答 1查看 1.1K关注 0票数 0

我正在测试Angular 2中依赖于Router的服务(myService)。因为我使用的是Angular的一个组件,所以我将使用Angular的TestBed类。所以我设置我的beforeEach如下:

代码语言:javascript
复制
let router: Router;
beforeEach(async(() => {
        TestBed.configureTestingModule({
            providers: [
                {provide: Router, useClass: RouterStub}
            ]
        });
        router = TestBed.get(Router);
        myService = new MyService(router);
    }));

其中RouterStub定义为

代码语言:javascript
复制
@Injectable()
export class RouterStub {
    navigate() {};
}

现在我写我的测试失败(红色,绿色,重构...)

代码语言:javascript
复制
it('on myServiceMethod calls router', () => {    
    let spy = spyOn(router, 'navigate');

    // myService.myServiceMethod(); // commented out so test fails

    expect(spy).toHaveBeenCalledTimes(1);
})

正如预期的那样,测试失败。但是,我现在尝试使用TestBed Inject函数编写相同的测试,即

代码语言:javascript
复制
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实例,但这个测试还是通过了。我有什么不明白的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-06 02:37:17

配对它你应该使用@angular/core/testinggetTestBed并像这样注入它,

代码语言:javascript
复制
  getTestBed().get(YourService)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42611956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档