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()
的原因是因为后者是 local 对 helper
函数的引用,您无法从测试文件访问它。
exports
对象 是 可从测试文件访问(它的名称为 renderFuncs
),因此 Sinon 可以将引用更改为 helper
并用间谍包裹它。
基本上我想修补另一个函数调用的函数,以便我可以确认它们已被调用。这在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()
的原因是因为后者是 local 对 helper
函数的引用,您无法从测试文件访问它。
exports
对象 是 可从测试文件访问(它的名称为 renderFuncs
),因此 Sinon 可以将引用更改为 helper
并用间谍包裹它。