ngx-bootstrap - не удается разрешить все параметры для BsModalService в модульных тестах - PullRequest
0 голосов
/ 05 ноября 2018

Я использую ModalService (3.0.1) ngx-bootstrap для отображения модального диалога, содержащего компонент

this.modalRef = this.modalService.show(MyDialogComponent);

и у меня есть это в моем модульном тесте (шутка)

beforeEach(async(() => {
  TestBed.configureTestingModule({
    declarations: [MyComponent, MyDialogComponent],
    schemas: [CUSTOM_ELEMENTS_SCHEMA],
    providers: [MyService],
    imports: [
      ModalModule.forRoot(),
    ],
  })
  .compileComponents();
}));

Упрямая ошибка говорит мне Не удается разрешить все параметры для BsModalService: (?,?). В ответах, которые мне удалось найти, упоминалось отсутствие правильного @Injectable() декоратора, но это очевидно, вне моего контроля и, кроме всего прочего, это не имеет значения и вводит в заблуждение - декоратор присутствует в исходном коде ngx-bootstrap.

Я попытался явно предоставить все компоненты и службы из пакета (а не ModuleWithProviders, но это тоже не помогло.

Не хватает идей.

Обновление 1

Пробовал комментировать и выходить

import 'core-js/es7/reflect';

в plyfills.ts. Кажется, не имеет значения. Разве есть параметр конфигурации Jest, связанный с тем, что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Поскольку сервис от BsModalService динамически заполняет DOM (entryComponents), вы можете использовать BrowserDynamicTestingModule API, добавив в configureTestingModule:

beforeEach(async(() => {
TestBed.configureTestingModule({
    imports: [ ModalModule.forRoot() ],
    declarations: [ MyDialogComponent ],
}).overrideModule(BrowserDynamicTestingModule, {
  set: {
    entryComponents: [ HelloComponent ],
  }
}).compileComponents();

}));

вызывает элементы шаблона (например, кнопку) с помощью API dispatch , а затем просто проверяет, появляется ли оно в DOM.

вот stackblitz с живым примером.

ПРИМЕЧАНИЕ: Поскольку ngx BsModalService заполняет DOM как одноуровневый элемент для корневого узла angular, я не смог использовать Angular API для выбора модального элемента, поэтому вместо этого я пришлось использовать DOM querySelector . Если у кого-то есть лучший способ, пожалуйста, прокомментируйте, чтобы я мог обновить

0 голосов
/ 05 ноября 2018

попробуйте импортировать core-js / es7 / отражать в ваши polyfills.ts, это необходимо, чтобы ваш тест работал

import 'core-js/es7/reflect';
...