我的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参考,我也不知道它来自哪里。
答案 0 :(得分:1)
我想Modal也缺少依赖项。我已经看到这样的错误,其中错误只解释了查找依赖项(服务)的问题,而不是它依赖的依赖项(即使这是根本原因)。你是如何在主应用程序中配置它的?是仅仅通过将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
方法,因为这是正在测试的服务的行为。