JavaScript测试间谍

问题描述

在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的主张,我们可以使用一个简单的间谍检查许多不同的结果。

间谍最常见的情况是……

  • 检查一个函数被调用了多少次
  • 检查将哪些参数传递给函数

何时使用存根

存根就像间谍一样,只不过它们代替了目标函数。它们还可以包含自定义行为,例如返回值或引发异常。他们甚至可以自动调用作为参数提供的任何回调函数。

存根有一些常见用途:

  • 您可以使用它们替换有问题的代码段
  • 您可以使用它们来触发原本不会触发的代码路径,例如错误处理
  • 您可以使用它们来帮助更轻松地测试异步代码