如何修复beforeEachProviders(在RC4中已弃用)

17

我刚刚把 Angular2 从 RC3 升级到了 RC4 ...

import {
  expect, it, iit, xit,
  describe, ddescribe, xdescribe,
  beforeEach, beforeEachProviders, withProviders,
  async, inject
} from '@angular/core/testing';

在我的单元测试中,我有以下代码...

beforeEachProviders(() => [
    {provide: Router, useClass: MockRouter}
]);

这个方法在之前的版本中可用,但是在RC4版本中会有一个关于beforeEachProviders的弃用警告。

有没有人知道新的替代方法是什么?或者我应该从其他地方导入beforeEachProviders而不是'@angular/core/testing'?

3个回答

21

您需要从@angular/core/testing导入addProviders。

而不是:

beforeEachProviders(() => [
    {provide: Router, useClass: MockRouter}
]);

你需要这样做:

beforeEach(() => {
    addProviders([
        {provide: Router, useClass: MockRouter}
    ])
});

来源:RC4变更日志


1
非常感谢您- 您使用 addProviders 的方式是正确的 - 不需要使用 provide(可能已被弃用)。您提到变更日志非常重要 - 万分感谢。帮助我解决了很多问题,我无比感激。节省了我很多时间! - danday74
1
provide()已被弃用,但您应该使用什么替代品? - wholladay
1
@wholladay 一个普通对象,看看它与众不同的地方 http://stackoverflow.com/review/suggested-edits/12924184 - Estus Flask
4
看起来 addProviders 在 rc.6 版本中已经删除了。目前还不确定该使用什么替代方法。 - Josh Werts
2
如何在rc.6中修复它?因为@angular/core/testing中已删除addProvider。 - ljofre
3
你需要使用TestBed.configureTestingModule而不是之前的方法。以下是一个示例 - mifish

14

1
这里有一个完整的示例,涉及窗口参考服务:
import { TestBed, inject } from '@angular/core/testing';
import { WindowRef } from './window-ref';

describe('WindowRef', () => {
  let subject: WindowRef;

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        WindowRef
      ]});
  });

  beforeEach(inject([WindowRef], (windowRef: WindowRef) => {
    subject = windowRef;
  }));

  it('should provide a way to access the native window object', () => {
    expect(subject.nativeWindow).toBe(window);
  });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接