【问题标题】:angular2 rc.4: How to inject mocked services (provide() is deprecated)angular2 rc.4:如何注入模拟服务(provide() 已弃用)
【发布时间】:2016-07-02 15:48:02
【问题描述】:

自 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}])

它有效!

【问题讨论】:

    标签: unit-testing angular


    【解决方案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}
    

    【讨论】:

      猜你喜欢
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2019-06-08
      • 2013-01-24
      相关资源
      最近更新 更多