【问题标题】:Patch/mock function inside another function for testing in javascript另一个函数中的补丁/模拟函数,用于在 javascript 中进行测试
【发布时间】:2016-05-26 18:31:57
【问题描述】:
基本上,我想修补另一个函数调用的函数,以便我可以确认它们已被调用。这在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)
【问题讨论】:
标签:
javascript
node.js
unit-testing
mocha.js
sinon
【解决方案1】:
这是可能的,但它确实需要一些重写,尤其是你在 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 的引用并用间谍包裹它。 p>