由于多个测试用例,Sinn没有存根

时间:2019-04-03 13:44:20

标签: node.js mocha sinon

GitHub Repo

当我使用mocha运行测试用例时,sinon将基于被调用的第一个app.js设置存根。看看其他有相同问题的人,看起来问题是当我require('../../../app')提取缓存版本时,它使用的存根与我第一次调用它时设置的存根相同。

在两个测试用例的beforeEach部分中,我尝试过的操作:

  • decache('../../../app'); app = require('../../../app')
  • 使用Sinon沙箱并还原 那
  • delete require.cache[require.resolve('../../../app')]; app = require('../../../app')
  • 使用嘲讽方法重置缓存

我不知道它是否在调用需求的缓存版本,或者是否没有正确地将其存根。

在此先感谢您能提供的任何帮助。

1 个答案:

答案 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());