[英]Angular tests - NullInjectorError: StaticInjectorError(DynamicTestModule)[NgxPermissionsDirective -> NgxPermissionsService]
[英]NullInjectorError: StaticInjectorError(DynamicTestModule)[ToastrService -> InjectionToken ToastConfig]: in tslint angular 8
當我在 angular 8 項目中運行單元測試時,我在 ngx-toastr 中發現了一個錯誤
NullInjectorError: StaticInjectorError(DynamicTestModule)[ToastrService -> InjectionToken ToastConfig]:
我在spec.ts文件中導入了requierd模塊,並且我還在app.module.ts中聲明了forRoot()
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [MatTabsModule,
ReactiveFormsModule,
MatTooltipModule,
HttpClientTestingModule,
RouterTestingModule,
ToastrModule
],
declarations: [CommunicationComponent],
providers: [
ToastrService,
]
})
.compileComponents();
}));
從 'ngx-toastr' 導入 { ToastrModule };
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ToastrModule.forRoot()],
})
.compileComponents();
}));
在導入中添加 ToastrModule.forRoot() 如上所示,您的錯誤可能會得到解決
這些方法對我不起作用。 我必須為提供者提供我自己的價值。 這對我有用:
首先,我聲明了我自己的“虛擬”實現:
const toastrService = {
success: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { },
error: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { }
};
然后,我在提供者部分指出了要使用的值:
providers: [
...
{ provide: ToastrService, useValue: toastrService },
],
像下面這樣更改提供者
providers: [
{provide: ToastrService, useClass: ToastrService}
]
您可能忘記添加.forRoot()
只需在 module.ts 中添加這種方式
ToastrModule.forRoot()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.