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();
}));
以下のようにプロバイダーを変更します
providers: [
{provide: ToastrService, useClass: ToastrService}
]
これらのアプローチは私にはうまくいきませんでした。プロバイダーに自分の価値を提供する必要がありました。これは私のために働いたものです:
まず、自分の「ダミー」実装を宣言しました。
const toastrService = {
success: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { },
error: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { }
};
次に、プロバイダーセクションで使用する値を指定しました。
providers: [
...
{ provide: ToastrService, useValue: toastrService },
],
import {ToastrModule} from 'ngx-toastr';
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ToastrModule.forRoot()],
})
.compileComponents();
}));
上記のようにインポートにToastrModule.forRoot()を追加すると、エラーが解決する可能性があります