当我使用mocha运行测试用例时,sinon将基于被调用的第一个app.js设置存根。看看其他有相同问题的人,看起来问题是当我require('../../../app')
提取缓存版本时,它使用的存根与我第一次调用它时设置的存根相同。>
在两个测试用例的beforeEach部分中,我尝试过的操作:
decache('../../../app'); app = require('../../../app')
delete require.cache[require.resolve('../../../app')]; app = require('../../../app')
我不知道它是否在调用需求的缓存版本,或者是否没有正确地将其存根。
在此先感谢您能提供的任何帮助。
答案 0 :(得分:0)
默认情况下,模块在Node中以Singleton类型的行为导入,例如
const app = require('./app');
app.someProperty = 'x';
如果我在此之后的 文件中再次require
个应用,那么您可以期望someProperty
仍然是x
,因为如您所知,节点将缓存结果并每次都返回相同的结果。
对于您而言,这与Node的关系较小,而对Sinon的使用更多-当您stub
进行某项操作时,常见的做法是在测试完成后恢复该值,例如
const app = require('...');
before(() => sinon.stub(app,'someFunction'));
after(() => app.someFunction.restore());