我有lib.js
我将要求并在2个测试中进行测试,test1.js
和test2.js
(使用mocha和should.js):
lib.js
只是导出一个数据对象:
module.exports.data = {};
test1.js
看起来像这样:
var data = require('./lib.js').data;
describe('.data', function() {
it('should be able to add data', function() {
data.entry = 'random data';
console.log(data); // expecting to get `{ entry: 'random data' }`
})
})
test2.js
看起来像这样:
var data = require('./lib.js').data;
describe('.data', function() {
it('should have empty data', function() {
console.log(data); // expecting to get `{}`
})
})
如果我使用多个文件(例如mocha test1.js test2.js
)运行mocha,则两者都会打印{ entry: 'random data' }
,并且不希望一起运行测试会因单独运行它们而产生不同的结果。
我相信这是因为节点缓存了模块,我可以在离开测试之前恢复模块。但是,由于在编写测试时这种行为可能很容易发生,我想知道正确的策略是什么。也许我可以在摩卡水平上做些什么?非常感谢!
答案 0 :(得分:0)
我使用node-clone创建所需模块beforeEach
测试的深层副本。现在,测试将使用克隆而不是缓存模块。
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 `{}`
})
});
如果您不使用before
或beforeEach
个钩子,则应该能够在每个测试脚本中尽快克隆多个文件。
var clone = require('clone'),
data = clone(require('./lib.js')).data;