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函数的示例不能传递到其他文件/模块?如何解决此问题?
1条答案
按热度按时间8e2ybdfx1#
如https://medium.com/@DavideRama/mock-spy-exported-functions-within-a-single-module-in-jest-cdf2b61af642所述:
您可以使用的第一个策略是将对方法的引用存储在一个对象中,然后将其导出。sendDataHandler将调用存储在该对象中的sendToEH的引用。
模块:
测试文件:
通过这种方式,您将导入并模拟sendToEH的相同引用,该引用由sendDataHandler()调用,并且之前定义的相同测试现在将通过!