问题描述
我正在尝试测试一种启动模式的方法,以前有人这样做过吗,也许有人能给我指个正确的方向?我已经编写了以下测试套件。
describe('bdb modal provider test suite', () => {
let bdbModal: BdbModalProvider;
let modal: Modal;
let modalCtrl: ModalController;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
BdbModalProvider,
{ provide: ModalController, useClass: ModalControllerMock }
]
});
bdbModal = TestBed.get(BdbModalProvider);
modalCtrl = TestBed.get(ModalController);
});
beforeEach(() => {
modal = modalCtrl.create('ModalErrorPage', {});
});
it('should launch error modal', () => {
spyOn(modal, 'present');
bdbModal.launchErrModal('testing', 'error modal', 'OK');
expect(modal.present).toHaveBeenCalled();
});
});
这是错误日志:
应启动错误模式 BDB模式提供程序测试套件 预计间谍在场的人已经被叫来了。 在用户上下文中。(webpack:///src/providers/bdb-modal/bdb-modal.spec.ts:31:30<;-测试配置/karma-测试-shim.js:140545:31)
推荐答案
1.创建模式和模式控制器的间谍。
modalSpy = jasmine.createSpyObj('Modal', ['present']);
modalCtrlSpy = jasmine.createSpyObj('ModalController', ['create']);
modalCtrlSpy.create.and.callFake(function () {
return modalSpy;
});
2.在测试床中添加其条目,如下所示:
TestBed.configureTestingModule({
declarations: [
..............
],
providers: [
..............
{
provide: ModalController,
useValue: modalCtrlSpy
}
..............
],
imports: [
............
]
}).compileComponents();
}));
3.测试用例如下:
it('#display() should display modal', () => {
.........
expect(modalSpy.present).toHaveBeenCalled();
.........
});