我正在尝试对文件中的函数进行单元测试,同时存根同一文件中的另一个函数,但没有应用模拟,并且正在调用真正的方法。 下面是一个例子:
// file: 'foo.js'
export function a() {
// .....
}
export function b() {
let stuff = a(); // call a
// ...do stuff
}
我的测试:
import * as actions from 'foo';
const aStub = sinon.stub(actions, 'a').returns('mocked return');
actions.b(); // b() is executed, which calls a() instead of the expected aStub()
想想这在标准 ES5 中会是什么样子。 每个函数都以导出对象上的特定名称导出,但也可以使用函数名称在内部引用。 我们正在谈论两个不同的参考。 存根时,您正在更改外部参考。 内部参考保持不变。 你不能改变它,除非你创建了一个显式的依赖注入器(比如内部使用的 setter 函数)。 这不是错误,而是 JavaScript 的一个特性。
有什么解决方法吗?在测试 nodejs 文件时遇到这种问题是很常见的。
这在我们的文档中介绍,在如何部分:
http://sinonjs.org/how-to/link-seams-commonjs/