如何解决Mocha:无法在另一个测试文件中已经需要的文件中存根函数
我使用 Mocha 在 filetoTest.js
上运行测试套件,需要 greeting.js
// --filetoTest.js--
const { greeting } = require('./greeting');
module.exports = () => greeting();
// --greeting.js--
module.exports.greeting = () => 'hi!';
就其本身而言,此测试文件成功存根 greeting
。
// --test2.js--
let parent;
const sinon = require('sinon');
const chai = require('chai');
const greeting = require('../../greeting.js');
const { expect } = chai;
describe('stubbed /hi',() => {
before(async () => {
sinon.stub(greeting,'greeting').callsFake((req,res,next) => 'bye!');
parent = require('../../parent.js');
});
after(async () => {
greeting.greeting.restore();
});
it('should say bye',async function () {
expect(parent()).to.be.equal('bye!');
});
});
但是,如果我运行一个测试套件并有另一个需要 filetoTest.js
的测试文件,如下面的 test1.js
,上面的第一个测试 (test2.js
) 不会存根问候。>
// --test1.js--
const chai = require('chai');
const filetoTest = require('../../filetoTest.js');
const { expect } = chai;
describe('not stubbed /hi',() => {
it('should say hi',() => {
expect(filetotest()).to.be.equal('hi!');
});
});
似乎一旦 test1.js
需要 filetoTest
,mocha 不会在 filetoTest
的 require 上重新加载 test2.js
。所以 filetoTest
被困在旧的问候功能中。
解决方法
这个 answer 有效。我不得不删除缓存。
before(async () => {
delete require.cache[require.resolve('../../fileToTest.js')]; // <------
sinon.stub(greeting,'greeting').callsFake((req,res,next) => 'bye!');
fileToTest = require('../../fileToTest.js');
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。