10

当我在 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

4 回答 4

17

从'ngx-toastr'导入{ToastrModule};

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ToastrModule.forRoot()],

    })
      .compileComponents();
  }));

如上所示在导入中添加 ToastrModule.forRoot() ,您的错误可能会得到解决

于 2020-05-01T21:14:20.860 回答
3

这些方法对我不起作用。我必须为提供者提供我自己的价值。这对我有用:

首先,我声明了我自己的“虚拟”实现:

const toastrService = {
    success: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { },
    error: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { }
  };

然后,我在提供者部分指出了要使用的值:

providers: [
        ...
        { provide: ToastrService, useValue: toastrService },
      ],
于 2020-05-07T20:37:21.857 回答
1

更改如下提供者

providers: [
  {provide: ToastrService, useClass: ToastrService}
]
于 2019-12-05T08:24:10.870 回答
0

您可能忘记添加.forRoot()

只需在你的 module.ts 中添加这种方式

ToastrModule.forRoot()

于 2020-12-13T19:02:43.373 回答