我无法与sinon进行基本的衔接,进行单元测试。当最终调用stubbed方法时,它调用的是真实方法而不是存根版本。
我已经创建了一个简单的版本来说明我正在处理的问题。我正在运行meteor 1.6.1并使用命令meteortesting
使用meteor test --once --driver-package meteortesting:mocha
包,以下文件都在/server
目录中。我在被存根的模块上使用module.exports
而不是导出,因为会抛出错误(单独的错误,import * as foo from './file'
应该有效)。
有趣的是,如果我使用导出默认值导出calc-module.js
,存根可以正常工作,问题是我在一个大型生产应用程序中工作,并且我希望避免使用导出默认值仅用于存根目的
我在节点8中尝试了几乎完全相同的代码,它运行正常。
//calc-module.test.js
import { expect } from 'chai';
import { runAdd5 } from './wrappers';
import calcModule from './calc-module';
import sinon from 'sinon';
describe('calcModule', () => {
before(() => {
sinon.stub(calcModule, 'add5').callsFake((number) => {
return number
});
});
it('stubbed add5 causes function to not add anything', () => {
const result = runAdd5(0)
expect(result).to.eql(0)
});
});
//calc-module.js
const add5 = (number) => {
return number + 5
}
module.exports = {
add5
}
//wrappers.js
import { add5 } from './calc-module';
const runAdd5 = (number) => {
return add5(number)
};
export {
runAdd5
};