如何检查多个调用笑话间谍的多个参数?

新手上路,请多包涵

我在 React 组件中有以下功能:

 onUploadStart(file, xhr, formData) {
  formData.append('filename', file.name);
  formData.append('mimeType', file.type);
}

这是我的测试,至少可以调用间谍:

 const formData = { append: jest.fn() };
const file = { name: 'someFileName', type: 'someMimeType' };
eventHandlers.onUploadStart(file, null, formData);

expect(formData.append).toHaveBeenCalledWith(
  ['mimeType', 'someMimeType'],
  ['fileName', 'someFileName']
);

但是,断言不起作用:

 Expected mock function to have been called with:
 [["mimeType", "someMimeType"], ["fileName", "someFileName"]]
But it was called with:
  ["mimeType", "someMimeType"], ["filename", "someFileName"]

使用 toHaveBeenCalledWith 的正确方法是什么?

原文由 Andreas Köberle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 650
2 个回答

我能够模拟多个调用并以这种方式检查参数:

 expect(mockFn.mock.calls).toEqual([
  [arg1, arg2, ...], // First call
  [arg1, arg2, ...]  // Second call
]);

其中 mockFn 是您的模拟函数名称。

原文由 Andi 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于发生了很多同步调用,我遇到了一些调用顺序会有所不同。感谢这篇文章,所以我有办法验证这一点并忽略订单。

 expect(mockFn.mock.calls).toMatchObject(expect.arrayContaining(
  [
      objectContaining(oneOfYourObject)
  ],
  [
      objectContaining(oneOfYourObject)
  ],
  [
      objectContaining(oneOfYourObject)
  ]
));

原文由 Nate Cheng 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题