gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:55:18 25 4
gpt4 key购买 nike

我有一个 lib.js,我将在 2 个测试中要求和测试,test1.jstest2.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,比如 mocha test1.js test2.js,两者都会打印 { entry: 'random data' },它会是一起运行测试会得到与单独运行测试不同的结果,这是不受欢迎的。

我相信这是因为 Node 缓存了模块,我可以在离开测试之前恢复模块。但是,由于这种行为在编写测试时很容易发生,我想知道正确的策略是什么。也许我可以在 Mocha 级别做些什么?非常感谢!

最佳答案

我使用 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 `{}`
})

});

如果您不使用 beforebeforeEach Hook ,您应该能够通过在每个测试脚本中尽快克隆来跨多个文件执行相同的操作。

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

关于javascript - 为多个测试文件运行 Mocha 时防止测试污染所需模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25495585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com