业力测试NullInjectorError:InjectionToken fileName没有提供者

时间:2018-08-17 16:41:20

标签: angular unit-testing karma-jasmine

我知道Stackoverflow上也有一些类似的问题,但是它们并不能完全回答我的问题。

在Angular项目中运行Karma测试时,出现以下错误: NullInjectorError: No provider for InjectionToken app.config!

我知道我需要在.spec文件中为InjectionToken指定一个提供程序,但是我不确定确切的语法。

这是我的app.config文件:

export let APP_CONFIG = new InjectionToken("app.config");
export const AppConfig: IAppConfig = {
  relativeDateLimit: 604800000,
  dateFormat: 'MM-DD-YYYY',
  ...
}
export const AppConfig: IAppConfig = {
  relativeDateLimit: 604800000,
  dateFormat: 'MM-DD-YYYY',
  ...
}

然后在.component.ts文件中,就像在构造函数中那样使用它:

import { APP_CONFIG } from '../../app.config';

constructor(@Inject(APP_CONFIG) public appConfig) {}

现在在此组件的.spec.ts文件中,我知道我需要为InjectionToken

设置提供程序

我尝试这样做:

import { InjectionToken } from "@angular/core";
...

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ RelativeDateComponent ],
      providers: [ InjectionToken ]
    })
    .compileComponents();
  }));

但是这种语法不起作用,因为我还需要以某种方式指定app.congig。任何帮助表示赞赏。谢谢

1 个答案:

答案 0 :(得分:1)

在* .spec.ts文件中,需要将以下内容添加到provider数组:

providers: [
  { provide: APP_CONFIG, useValue: AppConfig }
]