通过用虚拟替代品替换它来模拟函数

时间:2017-09-05 18:34:11

标签: javascript testing mocking sinon stub

我有一个异步函数我想监视它是否被调用以及参数是什么。该函数接受两个参数发出网络请求并返回基于这两个参数的响应,例如假设它是一个附加API。您传递11并获取2。而不是发出这个请求我想为它创建一个模拟,我用它的同步对应替换这个方法。例如。

这是原始的添加功能:

const async realAdd = (a, b) => {
    return makeRequest(`http://my-service.com/add?a=${a}&b=${b}`)
}

这是我想用来嘲笑的那个:

const async dummyAdd = (a, b) => {
    return Promise.resolve(a + b)
}

假设有一个函数需要add并使用它。在这种情况下,这是我想使用的功能,我想用以前的版本模拟add

const mockAdd = sinon.something(dummyAdd)
let result = someFunctionThatUses(mockAdd)
assert.equal(mockAdd.called, 1)

我想要的只是传递虚拟add方法并检查它是否被调用的方法,但我仍然希望add函数能够return承诺。

1 个答案:

答案 0 :(得分:0)

const spy = sinon.spy(mockAdd);
let result = someFunctionThatUses(mockAdd);
assert(spy.calledOnce);

文档参考:http://sinonjs.org/releases/v4.1.1/spies/