NullInjectorError:StaticInjectorError(DynamicTestModule)[ToastrService-> InjectionToken ToastConfig]:以tslint角8

时间:2019-12-05 08:14:34

标签: angular unit-testing eslint ngx-toastr

当我在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();

}));

4 个答案:

答案 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()