Mock Jest函数示例不会继续调用其他文件

2ledvvac  于 2023-05-27  发布在  Jest
关注(0)|答案(1)|浏览(162)

MockJest函数示例似乎不会传递到导入的模块。我有一个函数sendDataHandler,它调用sendToEH。我想写一个jest测试,确保对sendDataHandler的调用也会对sendToEH进行调用。
所以我的实现:

app.sendToEH = jest.fn();

await app.sendDataHandler(req, res, next);

expect(app.sendToEH).toHaveBeenCalled();

此测试失败。当我进入调试模式并遵循顺序操作时,sendDataHandler从模块而不是定义的mock函数调用sendToEH
如果我写:

app.sendToEH = jest.fn();

await app.sendToEH('asdf');

await app.sendDataHandler(req, res, next);

expect(app.sendToEH).toHaveBeenCalled();

测试通过。
为什么mock函数的示例不能传递到其他文件/模块?如何解决此问题?

8e2ybdfx

8e2ybdfx1#

https://medium.com/@DavideRama/mock-spy-exported-functions-within-a-single-module-in-jest-cdf2b61af642所述:
您可以使用的第一个策略是将对方法的引用存储在一个对象中,然后将其导出。sendDataHandler将调用存储在该对象中的sendToEH的引用。
模块:

var sendToEH = function sendToEH() {};
var sendDataHandler = function sendDataHandler() { exportFunctions.sendToEH(); };
const exportFunctions = {
  sendToEH,
  sendDataHandler
};
export default exportFunctions;

测试文件:

app.exportFunctions.sendToEH = jest.fn();

await app.exportFunctions.sendDataHandler(req, res, next);

expect(app.exportFunctions.sendToEH).toHaveBeenCalled();

通过这种方式,您将导入并模拟sendToEH的相同引用,该引用由sendDataHandler()调用,并且之前定义的相同测试现在将通过!

相关问题