用于javascript测试的另一个函数中的补丁/模拟函数
基本上,我想修补另一个函数调用的函数,这样我就可以确认它们已被调用。这在js中可能吗?(我正在使用摩卡/柴/西农进行测试) 我想做的事情的简化版本:用于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
// 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将其包装起来