当我在angular 8项目中运行单元测试时,我发现ngx-toastr中存在错误
NullInjectorError:StaticInjectorError(DynamicTestModule)[ToastrService-> InjectionToken ToastConfig]:
然后我在spec.ts文件中导入了所需的模块,并且还在app.module.ts中声明了forRoot()
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [MatTabsModule,
ReactiveFormsModule,
MatTooltipModule,
HttpClientTestingModule,
RouterTestingModule,
ToastrModule
],
declarations: [CommunicationComponent],
providers: [
ToastrService,
]
})
.compileComponents();
}));
答案 0 :(得分:7)
从'ngx-toastr'导入{ToastrModule};
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ToastrModule.forRoot()],
})
.compileComponents();
}));
如上所述在导入中添加ToastrModule.forRoot(),您的错误可能会得到解决
答案 1 :(得分:2)
这些方法对我不起作用。我必须为提供者提供我自己的价值。 这对我有用:
首先,我声明了自己的“虚拟”实现:
const toastrService = {
success: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { },
error: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { }
};
然后,我在提供程序部分中指出了要使用的值:
providers: [
...
{ provide: ToastrService, useValue: toastrService },
],
答案 2 :(得分:0)
按如下所示更改提供商
providers: [
{provide: ToastrService, useClass: ToastrService}
]
答案 3 :(得分:0)
您可能忘了添加.forRoot()
只需在模块中添加这种方式即可。
ToastrModule.forRoot()