ngx-bootstrap-无法在单元测试中解析BsModalService的所有参数

时间:2018-11-05 14:26:54

标签: angular ngx-bootstrap ngx-bootstrap-modal

我正在使用ngx-bootstrap(3.0.1)ModalService来显示包含组件的模式对话框

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 :(得分:0)

尝试在您的polyfills.ts中导入core-js / es7 / reflect,这是使您的测试正常进行所必需的

import 'core-js/es7/reflect';

答案 1 :(得分:0)

随着BsModalService的服务动态填充DOM(entryComponents),您可以通过将BrowserDynamicTestingModule API添加到configureTestingModule中来使用它:

self.process_queue

}));

使用dispatch API触发模板元素(例如按钮),然后检查它是否在DOM中弹出。

这是一个{@ 3}},带有一个实时示例。

注意::由于ngx stackblitz将DOM填充为angular根节点的兄弟,因此我无法使用Angular API选择模式元素,因此我不得不使用DOM BsModalService。如果有人有更好的方法,请发表评论,以便我进行更新