问题描述
在js测试中,我无法理解Spy- Spies的概念以及存根的区别。
间谍:
function spyOn(Object,method) { /*... */ }
// A common way of using a spy
const dateSpy = spyOn(Date,'Now')
Date.Now()
// A common way of checking the spy
console.log(dateSpy.called.length > 0)
存根:
function stubAmount(amount) {
Apple.amount = () => amount
}
// Testing function
function haveApple(amount) {
stubAmount(amount)
howsMyCollection()
}
解决方法
何时使用间谍
顾名思义,间谍用于获取有关函数调用的信息。例如,间谍可以告诉我们一个函数被调用了多少次,每个调用具有什么参数,返回了什么值,抛出了什么错误,等等。
因此,每当测试的目的是验证发生的事情时,间谍都是一个不错的选择。结合Sinon的主张,我们可以使用一个简单的间谍检查许多不同的结果。
间谍最常见的情况是……
- 检查一个函数被调用了多少次
- 检查将哪些参数传递给函数
何时使用存根
存根就像间谍一样,只不过它们代替了目标函数。它们还可以包含自定义行为,例如返回值或引发异常。他们甚至可以自动调用作为参数提供的任何回调函数。
存根有一些常见用途:
- 您可以使用它们替换有问题的代码段
- 您可以使用它们来触发原本不会触发的代码路径,例如错误处理
- 您可以使用它们来帮助更轻松地测试异步代码