簡體   English   中英

Angular2-Modal無法在Karma中運行

[英]Angular2-Modal won't run in Karma

我的angular 2應用程序中的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$$1!
Error: DI Error

UiComponentService是我使用模態的地方。 在添加模態之前,測試正在進行。 我找不到對Modal的引用,並在任何地方附加了$ 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方法,因為這就是被測試服務的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM