Angular2-Modal 不会在 Karma 中 运行

Angular2-Modal won't run in Karma

我的 angular2 应用程序中的 angular2-modal 运行 很好。但是,我在通过 Karma 进行测试时遇到了问题。我已经用

设置了我的测试台
beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [
                HttpModule
            ],
            providers: [
                ApiService,
                MockBackend,
                UiComponentService,
                BaseRequestOptions,
                AlertCenterService,
                {
                    provide: Http,
                    useFactory: (backend: any, options: any) => new Http(backend, options),
                    deps: [MockBackend, BaseRequestOptions]
                },
                Overlay,
                OverlayRenderer,               
                Modal
            ]
        });
    });

但是,我得到了奇怪的 DI 错误:

Error: No provider for Modal$!
Error: DI Error

UiComponentService 是我使用模式的地方。在添加模态之前,测试是有效的。我找不到在任何地方附加 $$1 的 Modal 参考,我不明白它来自哪里。

我想模态框也缺少依赖项。我见过这样的错误,其中错误仅解释了所查找的依赖项(服务)的问题,而不是它所依赖的依赖项(即使这是根本原因)。您如何在主应用程序中配置它?是仅通过将模态添加到提供者,还是导入一些 Module.forRoot()。如果是后者,你应该为测试做同样的事情

但是...

您真的需要完全工作 Modal 进行单元测试吗?模拟它可能会更好,因为您需要测试的只是服务的行为。我假设所有服务所做的就是调用 Modal 上的一些方法。这就是您真正需要测试的全部内容

let modal;

beforeEach(() => {
  modal = { openModal: jasmine.createSpy('openModal') }

  ...
  providers: [
    { provide: Modal, useValue: modal }
  ]
})

it('', () => {
  doSomething()

  expect(modal.openModal).toHaveBeenCalledWith(whatever);
})

这只是假设 Modal 有方法 openModal。您真正需要测试的只是服务调用 openModal 方法,因为这是被测试服务的行为。