NG2 RC5: HTTP_PROVIDERS已被弃用。

13

在 Angular2 的 RC5 版本中,他们弃用了 HTTP_PROVIDERS 并引入了 HttpModule。对于我的应用程序代码来说,这个改变已经运行良好,但是我在我的 Jasmine 测试中遇到了困难。

下面是我目前在我的测试规范中所做的事情,但由于 HTTP_PROVIDERS 已被弃用,现在我应该做什么?是否有其他需要提供的东西代替 HTTP_PROVIDERS?在 RC5 环境中正确的方法是什么?

beforeEach(() => {
  reflectiveInjector = ReflectiveInjector.resolveAndCreate([
    HTTP_PROVIDERS,
    ...
  ]);

  //other code here...
});

it("should....", () => { ... });

1
HTTP_PROVIDERS已被弃用,现已被HttpModule取代。 - micronyks
太好了,我明白那部分。现在,你如何在Jasmine测试中使用它呢? :) - hartpdx
我遇到了完全相同的问题,甚至已经提交了一个错误报告,因为这是一个重要的功能,我不知道现在该如何使用它... :( - born2net
@balteo... 你可以谷歌搜索“angular2 breaking changes”。祝你好运。我无法发送链接,因为我是从手机发送这段文字的。 - micronyks
@balteo 是的,他们经常会废弃一些东西,但却不指出应该用什么来替代被废弃的组件,这真的很让人沮丧。你必须要做大量的挖掘才能找到答案。但我想这还处于 RC 阶段,所以我们不能太抱怨了 :) 当他们发布新版本时,通常会发布一个破坏性变更文档,并概述相关信息,但我不确定是否总是如此... - dudewad
显示剩余2条评论
2个回答

11

现在已经弃用了HTTP_PROVIDERS,RC5中使用HttpModule进行替换。

在您的describe块中,添加TestBed.configureTestingModule与所需的导入和提供程序数组属性,如下所示:

describe("test description", () => {
    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [HttpModule],
            providers: [SomeService]
        });
    });
    it("expect something..", () => {
        // some expectation here
        ...
    })
})

这是我如何让我的单元服务测试与RC5一起工作的,希望在下一个发布候选版本和最终版本之间不必更改。如果你像我一样,你可能对发布候选版本之间的过时警告感到沮丧。我希望事情很快就会稳定下来!


执行 import { HttpModule } from '@angular/http'; - Sen Jacob

2
我在更新代码从pre-RC5到RC6时遇到了类似的问题。进一步解释Joe W上面的答案,我替换了这段代码:
import { ReflectiveInjector, provide } from '@angular/core';
import { HTTP_PROVIDERS, RequestOptions } from '@angular/http';

export function main() {
  describe('My Test', () => {
    let myService: MyService;

    beforeAll(() => {
      let injector = ReflectiveInjector.resolveAndCreate([
        HTTP_PROVIDERS,
        provide(RequestOptions, { useValue: getRequestOptions() }),
        MyService
      ]);
      myService = injector.get(MyService);
    });

    it('should be instantiated by the injector', () => {
      expect(myService).toBeDefined();
    });
...

使用此RC6代码(我猜应该也适用于RC5):
import { TestBed } from '@angular/core/testing';
import { HttpModule, RequestOptions } from '@angular/http';

export function main() {
  describe('My Test', () => {
    let myService: MyService;

    beforeAll(() => {
      TestBed.configureTestingModule({
        imports: [HttpModule],
        providers: [
          { provide: RequestOptions, useValue: getRequestOptions() },
          MyService
        ]
      });
      myService = TestBed.get(MyService);
    });

    it('should be instantiated by the testbed', () => {
      expect(myService).toBeDefined();
    });
...

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