angular2 rc.4:如何注入模拟服务(不推荐使用provide())

时间:2016-07-02 15:48:02

标签: unit-testing angular

自角度2.0.0-rc.4发布(change log)以来,beforeEachProvidersprovide都已弃用。我的问题是如何在我的组件中注入我的模拟服务。 这是我的beforeEach函数,它创建了一个覆盖了提供者的ComponentFixture

 beforeEach(async(inject([TestComponentBuilder], (tcb)=> {
   builder = tcb;
 })));

 beforeEach(async(inject([], ()=> {
   return builder
    .overrideProviders(MenubarComponent,[provide(MenubarService, {useClass:MenubarServiceMock})])
  .createAsync(MenubarTestComponent)
  .then((_fixture:ComponentFixture<any>)=> {
    fixture = _fixture;
  })
})));

这种方法很好但正如我所说provide 已弃用

在不使用provide()的情况下,正确的方法是什么?

修改

根据Günter的回答我改变了界限:

.overrideProviders(MenubarComponent,[provide(MenubarService, {useClass:MenubarServiceMock})])

为:

.overrideProviders(MenubarComponent,[{provide:MenubarService, useClass:MenubarServiceMock}])

它有效!

1 个答案:

答案 0 :(得分:1)

来自更改日志

import {addProviders, inject} from '@angular/core/testing';

describe('my code', () => {
  beforeEach(() => {
    addProviders([MyService]);
  });

  it('does stuff', inject([MyService], (service) => {
    // actual test
  });
});

而不是provide()使用

{provide: MenubarService, useClass:MenubarServiceMock}