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
方法,因为这是被测试服务的行为。
我的 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
方法,因为这是被测试服务的行为。