Angular 2 单元测试 beforeEachProvider 不注入(inject)服务

标签 angular angular2-services

我正在尝试在 Angular 2 中测试我的组件,但当组件的服务不在其提供者内时出现问题。

import {Component} from 'angular2/core';
import {ServiceName} from '../../services/ServiceName';

@Component({
  selector: 'component-name',
  template: `
    <div></div>
  `
})

export class ComponentName {    
  constructor(private ServiceName: ServiceName) {
  }
}

这是我的测试:

import {ComponentName} from '<path>';
import {ServiceName} from '<path>';

import {
  iit,
  it,
  ddescribe,
  describe,
  expect,
  inject,
  injectAsync,
  TestComponentBuilder,
  beforeEachProviders,
  fakeAsync,
  tick,
  setBaseTestProviders
} from 'angular2/testing';

beforeEachProviders(() => [
  ServiceName
]);

import {
  TEST_BROWSER_PLATFORM_PROVIDERS,
  TEST_BROWSER_APPLICATION_PROVIDERS
} from 'angular2/platform/testing/browser';

setBaseTestProviders(TEST_BROWSER_PLATFORM_PROVIDERS, TEST_BROWSER_APPLICATION_PROVIDERS);

describe('ServiceName', () => {

  it('should have name property set', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => {
    return tcb.createAsync(ComponentName).then((fixture) => {
      fixture.debugElement.componentInstance.isPanelActive = true;
      fixture.detectChanges();

      var compiled = fixture.debugElement.nativeElement;
      expect(compiled.querySelector('a.yes')).toContainText('Something');
    });
  }));

});

我得到的错误是:

 Failed: No provider for ServiceName! (ComponentName -> ServiceName)
Error: DI Exception

我尝试了 overrideProvide 方法,它没有用,还尝试在测试中创建一个 TestComponent 并将提供程序与 ComponentName 指令一起传递到那里。

有人知道吗?是否不可能通过引导文件引导服务并且不在@Component 中使用提供程序?我认为这就是 beforeEachProviders 的重点。

最佳答案

解决了。这是 System.js 配置。它没有给出任何其他错误。因为有这么多场景,我怀疑是在配置 block 中使用包导致的。我重新配置了我的 karma 和 test-main 文件:

https://github.com/mgechev/angular2-seed

谢谢

关于Angular 2 单元测试 beforeEachProvider 不注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35425457/

相关文章:

angular - 如何在 Spartacus SSR 中记录 http 请求的时间,即使在 SSR 超时后也是如此

javascript - TypeScript - 将 HTML 附加到 Angular 2 中的容器元素

javascript - “nodemon”不被识别为内部或外部命令、可操作程序或批处理文件

javascript - 将 HTML 中的逗号分隔字符串显示为表格/csv 格式

angular2-services - 如何在 Angular2 中向 http.get 请求添加标题?

dependency-injection - angular2 向其他人注入(inject)服务 - 使用@Inject 时出错

css - Angular Material 更改默认字体颜色

angular - 在 RxJs 5 中共享 Angular Http 网络调用结果的正确方法是什么?

angular - 强制多个组件使用同一个服务实例

angular - 在 Angular 2 中创建全局服务变量