Angular2-Modal在Karma中不会运行

时间:2017-03-23 14:25:21

标签: angular karma-runner angular2-modal

我的angular2-modal在我的角度2应用程序中正常运行。但是,我遇到了通过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$$1!
Error: DI Error

UiComponentService 是我使用模式的地方。在添加模态之前,测试工作正常。我无法在任何地方找到附加了1美元的Modal参考,我也不知道它来自哪里。

1 个答案:

答案 0 :(得分:1)

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

BUT ...

您是否真的需要全面工作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方法,因为这是正在测试的服务的行为。