Я запускаю несколько тестов с помощью команды ng test
и получаю следующее сообщение об ошибке:
NullInjectorError: R3InjectorError(DynamicTestModule)[TranslateService -> TranslateService]:
NullInjectorError: No provider for TranslateService!
Тест:
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
import { AppComponent } from './app.component';
import { TranslateTestingModule } from 'ngx-translate-testing';
import { CoreModule } from './core.module';
const ENGLISH_LANGUAGE = 'en';
describe('AppComponent', () => {
let fixture: ComponentFixture<AppComponent>;
let appComponent: AppComponent;
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
appComponent = fixture.componentInstance;
});
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
imports: [
CoreModule,
TranslateTestingModule
.withTranslations(ENGLISH_LANGUAGE, require('assets/i18n/en.json'))
.withDefaultLanguage(ENGLISH_LANGUAGE)
],
}).compileComponents();
});
it('should create the app', async(() => {
expect(appComponent).toBeTruthy();
}));
it('should have as title', async(() => {
appComponent.ngOnInit();
fixture.whenStable().then(() => {
expect(appComponent.testTitle).toEqual('app');
})
}));
});
И компонент:
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
testTitle?: string;
constructor(
private translateService: TranslateService,
private screenDeviceService: ScreenDeviceService
) {}
public ngOnInit() {
const subscription: Subscription = this.translateService.get('app.title').subscribe((text: string) => {
this.afterLanguageResourcesLoaded();
subscription.unsubscribe();
});
}
private afterLanguageResourcesLoaded(): void {
this.setAppMetaData();
}
private setAppMetaData(): void {
this.screenDeviceService.setMetaData({
title: this.translateService.instant('app.title'),
description: this.translateService.instant('app.description')
});
this.testTitle = this.translateService.instant('app.title');
}
}
Я также попытался импортировать модуль BrowserModule
:
imports: [
BrowserAnimationsModule,
И я попытался добавить поставщика TranslateService
:
providers: [
TranslateService
]
Наконец-то попробовал с двумя переменными-членами для двух служб, которые должны быть введены в конструктор компонента:
let translateService: TranslateService;
let screenDeviceService: ScreenDeviceService;
и предоставление их:
providers: [
TranslateService,
ScreenDeviceService
]
и получение их:
translateService = TestBed.get(TranslateService);
screenDeviceService = TestBed.get(ScreenDeviceService);
Но ничего не помогло.
У меня меньше Angular 9.0.4
ОБНОВЛЕНИЕ: в итоге я использовал реальный сервис перевода вместо имитируемого, и мне пришлось убить тестера и введите снова команду ng test
, чтобы мой исходный код был рассмотрен.