Patch/mock 另一个函数内的函数,用于在 javascript 中进行测试

Patch/mock function inside another function for testing in javascript

基本上我想修补另一个函数调用的函数,以便我可以确认它们已被调用。这在js中可能吗? (我正在使用 Mocha/Chai/Sinon 进行测试)。

我想做的事情的简化版本:

// in render.js
export helper = function() {}
export default = function() {
  helper()
}

// in the render-test.js
import render, { helper } from 'render'
// what I'd like to to:
helper = sinon.spy()
render()
assert(helper.called, true)

这是可能的,但它确实需要一些重写,最值得注意的是您在 render.js 中调用 helper 的方式。

这是一个有效的例子:

// render.js
export function helper() {}
export default function() {
  exports.helper()
}

// render-test.js
import render, * as renderFuncs from 'render'
...
sinon.spy(renderFuncs, 'helper');
render()
assert(renderFuncs.helper.called)

你需要调用 exports.helper() 而不是 helper() 的原因是因为后者是 localhelper 函数的引用,您无法从测试文件访问它。

exports 对象 可从测试文件访问(它的名称为 renderFuncs),因此 Sinon 可以将引用更改为 helper 并用间谍包裹它。