我试图弄清楚如何最好地处理以下用例。
我不想模拟函数,只是监视它并让原始实现完成工作。 假设我想跟踪在 postgres 驱动程序上调用了多少次查询。 以下方法有效:
const querySpy = pg.Client.prototype.query = jest.fn(pg.Client.prototype.query);
expect(querySpy.mock.calls.length).toBe(2)
问题是我还必须在测试结束时分配原始实现,这样它就不会影响同一文件中的其他人。 因此,如果一个人忘记了这种清理工作,很容易打破测试隔离。
我还注意到 jasmine 有 spyOn 似乎也可以开玩笑(但没有记录),这非常优雅,因此可以通过以下方式实现相同的目标:
const querySpy = spyOn(pg.Client.prototype, 'query').and.callThrough();
expect(querySpy.calls.count()).toEqual(3);
并且jasmine声称测试后自动删除spy,这太棒了。
但不确定这是否会成为笑话的正式部分? 问题是茉莉间谍的界面与开玩笑的模拟不同。 所以我认为最好的办法就是扩展模拟功能,这样它就可以很容易地用于使用spyOn
或类似的东西进行间谍活动。
欢迎任何反馈。
这将作为#1679 的一部分进行跟踪。
对此可能不正确,但expect.spyOn
与茉莉花spyOn
的不同之处在于它在测试结束时没有执行声称的“自动恢复”吗? 我认为这个功能非常简洁,并且清理了规范文件。 集成#1679 时是否有计划添加此类功能?
另见#2534。
最有用的评论
对此可能不正确,但
expect.spyOn
与茉莉花spyOn
的不同之处在于它在测试结束时没有执行声称的“自动恢复”吗? 我认为这个功能非常简洁,并且清理了规范文件。 集成#1679 时是否有计划添加此类功能?