我正在尝试为一个模块编写一个单元测试,该模块在其中调用另一个函数(作为模块)。测试是为了检查在调用主模块时是否正在调用导入的函数。
我一直在使用摩卡和柴。我还尝试了 Sinon 和 Proxyquire 的不同方法。
这些是模块和最近的测试尝试:
functionModule.js
module.exports = (param) => {
let somethingOld;
if (param) {
somethingOld = param;
}
return somethingOld
}
mainModule.js
const functionModule = require('./functionModule');
module.exports = (param1, param2) => {
const somethingNew = functionModule(argument);
return {somethingNew}
}
mainModule.test.js
const mainModule = require('../mainModule.js');
describe('test mainModule', () => {
it('test functionModule is called', () => {
const getModuleSpy = chai.spy.on(mainModule, 'functionModule');
mainModule(argument1, argument2);
expect(getModuloSpy).to.have.been.called();
})
})
我主要收到“AssertionError:预期 { Spy 'object.functionModule' } 已被调用”。
可以使用sinon使用stub方法将原始函数复制到main函数中。然后,您可以使用 chai 和expect 来验证主函数中的函数是否正在被调用。 首先,您需要重构 functionModule.js 的导出方式:
const send = (param) => {
let somethingOld;
if (param) {
somethingOld = param;
}
return somethingOld;
}
module.exports = { send: send }
同时修复你的 mainModule.js:
const functionModule = require('./functionModule');
module.exports = (param1, param2) => {
const somethingNew = functionModule.send(argument);
return {somethingNew}
}
然后像这样修复你的测试文件:
const mainModule = require('../mainModule.js');
const functionModule = require('../functionModule');
const sinon = require('sinon');
const { expect } = require('chai');
describe('test mainModule', () => {
it('test functionModule is called', () => {
const stubFunctionModule = sinon.stub(functionModule, 'send').returns(true);
mainModule(argument1, argument2);
expect(stubFunctionModule.calledOnce).to.be.true;
})
})
确保变量 argument1 和 argument2 是按值定义的。假设存根函数返回 true 结果值。看一下 Chai 文档,看到 CalledOnce 方法来验证存根函数是否被正确调用。
希望这对您有帮助。
问候