Как использовать специальный модуль для дочернего компонента при модульном тестировании? - PullRequest
0 голосов
/ 25 сентября 2019

Я не могу выполнить модульное тестирование с компонентом 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...