Angular中的Mock NgbModal

时间:2017-08-30 11:18:37

标签: angular unit-testing jasmine ng-bootstrap ng-modal

我需要模拟一个NgbModal以角度进行一些单元测试,但我不知道如何做到这一点。这是我的功能:

    openModal(deviceID: string, productID: string){
        const modalRef =  this.modalService.open(ProductModal)
        modalRef.componentInstance.content = {
            deviceId: deviceID,
            productId: productID
        } 
        modalRef.componentInstance.toEmit.subscribe(($e) => {
            if ($e === true) this.reloadList();
        });
    }

我应该做什么?

1 个答案:

答案 0 :(得分:1)

假设您的modalServiceNgbModal,您想要测试的逻辑似乎位于模态内容(ProductModal)内,而不是NgbModal本身。

正如您所看到的,在使用.open()之后,您的modalRef.componentInstance将成为ProductModal的一个实例;因此,您可以将ProductModal测试为任何组件,例如组件夹具并完全跳过modalService

(同样,假设ProductModal 具有适当装饰的组件。)

let component: ProductModal;
let fixture: ComponentFixture<ProductModal>;
beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [ NgbModal, NgbActiveModal ],
        declarations: [ ProductModal ]
    });
    fixture = TestBed.createComponent(ProductModal);
    component = fixture.componentInstance;
    fixture.detectChanges();
});

// now you have the component in `component`, so you can test
// component.content
// component.toEmit
// …