【问题标题】:Testing ModalController Ionic 3 spyOn method not called未调用测试 ModalController Ionic 3 spyOn 方法
【发布时间】:2018-11-22 06:44:17
【问题描述】:

我正在尝试测试一种启动模式的方法,以前有没有人这样做过,有人可以指出我正确的方向吗?我编写了以下测试套件。

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

【问题讨论】:

  • modalCtrl.create('ModalErrorPage', {}) 返回什么?
  • 模态对象的一个​​实例
  • 我很确定返回的是 Modal 的任何实例,但我需要真实的实例,如何获取它?

标签: angular unit-testing ionic-framework jasmine ionic3


【解决方案1】:

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(); 
    .........
});

【讨论】:

  • modal.onDidDismiss().then((d: any) => { // this.getInboxCollection() console.log('modal dismissed'); });我可以为这个@Yuvraj 提供测试用例
  • modal.onDidDismiss.and.returnValue(Promise.resolve(true));为 onDidDismiss 添加这一行
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 2021-11-29
  • 2017-09-07
  • 1970-01-01
  • 2020-08-21
  • 2018-10-15
  • 1970-01-01
相关资源
最近更新 更多