Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 茉莉花-测试一种以函数为参数的方法_Angular_Ionic2_Karma Jasmine - Fatal编程技术网

Angular 茉莉花-测试一种以函数为参数的方法

Angular 茉莉花-测试一种以函数为参数的方法,angular,ionic2,karma-jasmine,Angular,Ionic2,Karma Jasmine,我试图测试一个方法,该方法有一个对象和一个函数作为参数,期望它已被其对象和函数调用,但即使我传递了一个函数,它仍返回一个错误 Expected spy openContactEdit to have been called with [ Object({ ... }), Function ] but actual calls were [ Object({ ... }), Function ]. 我的代码是这样的: 联系编辑.测试.ts class ModalControllerMock

我试图测试一个方法,该方法有一个对象和一个函数作为参数,期望它已被其对象和函数调用,但即使我传递了一个函数,它仍返回一个错误

Expected spy openContactEdit to have been called with [ Object({ ... }),
  Function ] but actual calls were [ Object({ ... }), Function ].
我的代码是这样的:

联系编辑.测试.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, () => { });
});
openContactEdit(contact: any, onDismiss: (data) => any) {
  let modal = this.modalCtrl.create('EditContactPage', {
    contact: contact
  })

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

  modal.present();
}
模式服务.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, () => { });
});
openContactEdit(contact: any, onDismiss: (data) => any) {
  let modal = this.modalCtrl.create('EditContactPage', {
    contact: contact
  })

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

  modal.present();
}

将您的
()=>{}
替换为
jasmine.any(函数)
,如果您不关心特定的函数,您将被设置。请参阅。

匿名箭头函数的计算结果不会与实际调用它的函数相等。如果您不关心函数是什么,请尝试。