如何测试服务尝试以组件作为内容打开NgBootstrap模式?

时间:2017-03-31 17:34:47

标签: angular ng-bootstrap

我有一个简单的服务注入NgbModal并尝试以编程方式打开模式,如果发生请求错误:

handleError = (error): Observable<any> => {
  const modalRef = this.modalService.open(ChangeError);
  return Observable.throw(error);
};

当我尝试测试包含此方法的服务时,实例化失败并显示消息Error: No component factory found for NgbModalBackdrop. Did you add it to @NgModule.entryComponents?。但是,它在模块的@NgModule元数据中定义:

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    NgbModal
  ],
  declarations: [
    FirstComponent,
    SecondComponent
  ],
  exports: [],
  providers: [],
  entryComponents: [
    ChangeError, 
    NgbModalBackdrop
  ]
})
export class MyModule {  }

非常感谢任何解决此问题的想法。在浏览器中运行时,代码会在不生成异常的情况下执行,但无法实际打开模式。

1 个答案:

答案 0 :(得分:0)

通过将作为参数传递的imports成员TestBed.configureTestingModuleimports: [NgbModal, ...]更改为imports: [NgbModule.forRoot(), ...]

,解决了此问题

之前:

TestBed.configureTestingModule({
  imports: [NgbModal, ...]
  ...
}

后:

TestBed.configureTestingModule({
  imports: [NgbModule.forRoot(), ...]
  ...
}

似乎有点笨拙,但有效。