用于javascript测试的另一个函数中的补丁/模拟函数

用于javascript测试的另一个函数中的补丁/模拟函数,javascript,node.js,unit-testing,mocha.js,sinon,Javascript,Node.js,Unit Testing,Mocha.js,Sinon,基本上,我想修补另一个函数调用的函数,这样我就可以确认它们已被调用。这在js中可能吗?(我正在使用摩卡/柴/西农进行测试) 我想做的事情的简化版本: // 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

基本上,我想修补另一个函数调用的函数,这样我就可以确认它们已被调用。这在js中可能吗?(我正在使用摩卡/柴/西农进行测试)

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

// 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()
的原因是后者是对
helper
函数的本地引用,您无法从测试文件访问该函数

exports
对象可以从测试文件中访问(它的名称为
renderFuncs
),因此Sinon可以将引用更改为
helper
,并用spy将其包装起来