angular - 测试 ModalController Ionic 3 spyOn 方法未调用

标签 angular unit-testing ionic-framework jasmine ionic3

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

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

这是错误日志:

should launch error modal bdb modal provider test suite Expected spy present to have been called. at UserContext. (webpack:///src/providers/bdb-modal/bdb-modal.spec.ts:31:30 <- test-config/karma-test-shim.js:140545:31)

最佳答案

1.创建模态和模态 Controller 的 spy 。

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

关于angular - 测试 ModalController Ionic 3 spyOn 方法未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824441/

相关文章:

java - Spring/Hibernate 测试 : Inserting test data after DDL creation

c# - 如何(我应该)模拟 DocumentClient 进行 DocumentDb 单元测试?

angularjs - POST 请求 - Firebase - 预检响应无效(重定向) - CORS

typescript - 如何设置每 X 分钟本地通知一次?

ANDROID_HOME 未设置且 "android"命令不在您的 PATH Phonegap 中

angular - 具有特殊字符的自定义验证器模式 Angular 4

angular - ionic /Angular 将对象推送到数组对象

c# - 协助使用 rhino 模拟为方法编写单元测试

javascript - Angular - 如何在组件级别实现异常处理

c# - 在网络服务器 ASP Net Core/Angular 上保存私有(private)图像的最佳实践