Jest: 间谍功能

创建于 2016-09-20  ·  3评论  ·  资料来源: facebook/jest

我试图弄清楚如何最好地处理以下用例。

我不想模拟函数,只是监视它并让原始实现完成工作。 假设我想跟踪在 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或类似的东西进行间谍活动。

欢迎任何反馈。

最有用的评论

对此可能不正确,但expect.spyOn与茉莉花spyOn的不同之处在于它在测试结束时没有执行声称的“自动恢复”吗? 我认为这个功能非常简洁,并且清理了规范文件。 集成#1679 时是否有计划添加此类功能?

所有3条评论

这将作为#1679 的一部分进行跟踪。

对此可能不正确,但expect.spyOn与茉莉花spyOn的不同之处在于它在测试结束时没有执行声称的“自动恢复”吗? 我认为这个功能非常简洁,并且清理了规范文件。 集成#1679 时是否有计划添加此类功能?

另见#2534。

此页面是否有帮助?
0 / 5 - 0 等级