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/

相关文章:

javascript - 无法导航 Angular 2中的所需网址

Angular 2 "No provider for String!"

typescript - 在 Angular 服务中获取 Subject.asObservable() 的当前值

angular - ngZone或zone.js:猴子修补的地方?

javascript - Angular 2-对象属性作为未定义返回,但它们存在

javascript - Angular 4 在运行时动态加载模块和组件

Angular2可观察到的共享不起作用

javascript - Angular 2 - 未捕获( promise ): RangeError: Maximum call stack size exceeded

javascript - Angular : How to Add/Remove Files in the Angular?

angular - 为什么我在 Angular 2 中出现 "Unexpected token <"错误?