Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为多个测试文件运行Mocha时,防止测试污染所需模块_Javascript_Node.js_Testing_Mocha.js_Require - Fatal编程技术网

Javascript 为多个测试文件运行Mocha时,防止测试污染所需模块

Javascript 为多个测试文件运行Mocha时,防止测试污染所需模块,javascript,node.js,testing,mocha.js,require,Javascript,Node.js,Testing,Mocha.js,Require,我有一个lib.js,我需要它,并使用mocha和should.js在两个测试中进行测试,test1.js和test2.js: lib.js只导出一个数据对象: module.exports.data={}; test1.js如下所示: var data=require'/lib.js'.data; 描述'.data',函数{ 它“应该能够添加数据”,函数{ data.entry=‘随机数据’; console.logdata;//应获取`{entry:'random data'}` }

我有一个lib.js,我需要它,并使用mocha和should.js在两个测试中进行测试,test1.js和test2.js:

lib.js只导出一个数据对象:

module.exports.data={}; test1.js如下所示:

var data=require'/lib.js'.data; 描述'.data',函数{ 它“应该能够添加数据”,函数{ data.entry=‘随机数据’; console.logdata;//应获取`{entry:'random data'}` } } test2.js如下所示:

var data=require'/lib.js'.data; 描述“.data”函数{ 它“应该有空数据”,函数{ console.logdata;//应获取`{}` } } 如果我使用多个文件运行mocha,比如mocha test1.js test2.js,这两个文件都会打印{entry:'random data'},并且不希望一起运行测试与单独运行测试得到不同的结果

我相信这是因为节点缓存了模块,我可以在离开测试之前恢复模块。然而,由于这种行为在编写测试时很容易发生,我想知道正确的策略是什么。也许我可以在摩卡咖啡层面上做点什么?非常感谢

我用于在每次测试之前创建所需模块的深度副本。现在,测试将使用克隆而不是缓存的模块

var clone = require('clone');

describe('config', function(){
  var data;

  beforeEach(function() {
    data = clone(require('./lib.js')).data;
  });

  it('should be able to add data', function() {                                         
    data.entry = 'random data';                                                         
    console.log(data);  // expecting to get `{ entry: 'random data' }`                                                                  
  })    

  it('should have empty data', function() {
    console.log(data);  // expecting to get `{}`
  })

});
如果您不使用beforeach或beforeach钩子,那么您应该能够通过在每个测试脚本中尽快克隆来跨多个文件执行相同的操作

var clone = require('clone'),
data = clone(require('./lib.js')).data;

可能是重复的谢谢,路易斯。这很有帮助。我想我的问题应该是多个测试文件。理想情况下,我应该能够在不担心他人的情况下完成自己的测试。删除所有缓存以防止我自己的测试污染其他测试中需要的模块似乎有点乏味。我希望他们是独立的,即使他们一起运行。或者我必须用类似的东西,让它来帮我处理?谢谢