补丁/模拟函数内的另一个函数在JavaScript中进行testing

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

我想要做的简化版本:

// 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调用helperrender.js

这里有一个例子:

 // 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函数的本地引用,您无法从testing文件访问该helper函数。

这个exports对象可以从testing文件中获得(它的名字是renderFuncs ),所以Sinon可以把引用改为helper ,并用spy包装它。