Я не могу выполнить модульное тестирование с компонентом Karma Jasmine, у которого есть дочерний компонент с использованием канала ngx-translate
Я могу протестировать только один дочерний компонент, введя TranslatexxxxxStub.Но я не нахожу способ проверить родительский компонент, используя дочерний компонент.Мои угловые приложения используют ленивую загрузку.Итак, вот код
DatetimeComponentModule (child)
@NgModule({
declarations: [
DatetimeComponent,
],
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
IonicModule,
TranslateModule.forChild(),
OwlDateTimeModule,
OwlNativeDateTimeModule
],
exports: [
DatetimeComponent
]
})
export class DatetimeComponentModule {}
Я могу выполнить его модульное тестирование благодаря этому
describe('DatetimeComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DatetimeComponent, TranslatePipeStub ],
schemas: [ CUSTOM_ELEMENTS_SCHEMA ],
imports: [ TranslateModule.forRoot() ],
providers:[
{ provide: TranslatePipe, useClass: TranslatePipeStub },
{ provide: TranslateService, useClass: TranslateServiceStub },
{ provide: AppsFrameworkConfig, useValue: configTest }
]
});
fixture = TestBed.createComponent(DatetimeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
rootElement = fixture.debugElement
fixture.whenStable().then(() => fixture.detectChanges());
}));
Вот BatchFormComponentModule (parent)
@NgModule({
declarations: [
BatchFormComponent
],
imports: [
IonicModule,
CommonModule,
FormsModule,
ReactiveFormsModule,
TranslateModule.forChild(),
DatetimeComponentModule
],
entryComponents: [
BatchFormComponent
]
})
export class BatchFormComponentModule { }
Вот мой модульный тест для BatchFormComponent
describe('BatchFormComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [BatchFormComponent, TranslatePipeStub],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
imports: [
IonicModule,
FormsModule,
ReactiveFormsModule,
TranslateModule.forChild(),
DatetimeComponentModule
],
providers: [
FormBuilder,
{ provide: TranslatePipe, useClass: TranslatePipeStub },
{ provide: TranslateService, useClass: TranslateServiceStub },
{ provide: ModalController, useClass: UxComponentControllerStub },
{ provide: NavParams, useClass: NavParamsMock },
{ provide: AppsFrameworkConfig, useValue: configTest },
]
});
fixture = TestBed.createComponent(BatchFormComponent);
component = fixture.componentInstance;
fixture.detectChanges();
rootElement = fixture.debugElement
fixture.whenStable().then(() => fixture.detectChanges());
}));
К сожалению, у меня есть эта ошибка
TypeError: Невозможно прочитать свойство «подписаться» из undefined вTranslatePipe.push ../ node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js.TranslatePipe.transform (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js:1540:1)
Если я удаляю дочерний компонент из родительскогоУ меня больше нет проблем, поэтому я думаю, это потому, что моя заглушка плохо загружена для DatetimeComponent.