【问题标题】:Jasmine - Test a method which has a function as ParameterJasmine - 测试一个具有参数功能的方法
【发布时间】:2018-07-11 18:40:12
【问题描述】:

我正在尝试测试一个以 Object 和 Function 作为参数的方法,期望它已被其 Object 和 Function 调用,但即使我传递了一个函数,它也会返回错误。

Expected spy openContactEdit to have been called with [ Object({ ... }),
  Function ] but actual calls were [ Object({ ... }), Function ].

这就是我的代码的样子:

contact-edit.test.ts

class ModalControllerMock {
  static create(page: any, data?: any) {
    return new ModalMock;
  }
}

class ModalServiceMock {
  openContactEdit(contact: any, onDismiss: (data) => any): any {
    let modal = ModalControllerMock.create('EditContactPage', {
      contact: contact
    })

    modal.present();

    let data: any;

    onDismiss(data);
  }
}

it('should open edit contact page', () => {
  const contact = {
    "username": "callain0",
    "name": "Cordelia Allain"
  }
  spyOn(modalService, 'openContactEdit').and.callThrough();

  comp.editContact(contact)

  expect(modalService.openContactEdit).toHaveBeenCalledWith(contact, () => { });
});

modal-service.ts

openContactEdit(contact: any, onDismiss: (data) => any) {
  let modal = this.modalCtrl.create('EditContactPage', {
    contact: contact
  })

  modal.onDidDismiss(data => {
    onDismiss(data);
  })

  modal.present();
}

【问题讨论】:

  • 匿名箭头函数的计算结果不会等于您实际调用它的函数。如果你不关心函数是什么,试试jasmine.any

标签: angular ionic2 karma-jasmine


【解决方案1】:

将您的() => {} 替换为jasmine.any(Function),如果您不关心特定功能,您将被设置。见here

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2021-01-18
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多