Javascript require() 多次测试中的文件不会再次创建对象
Javascript require() a file in tests several times does not create the object again
我正在用 mocha 为 javascript API 编写一些测试。我在 运行 测试之前 docker 启动了我的项目,我意识到需要一个文件在多个测试中创建一个对象,例如像这些:
it('should return false 1', () => {
const testObject = require(./file.json)
delete testObject.neededAttribute1;
expect(function(testObject)).to.be.false;
});
it('should return false 2', () => {
const testObject = require(./file.json)
delete testObject.neededAttribute2;
expect(function(testObject)).to.be.false;
});
Javascript 不会在第二个测试中创建对象 testObject
,而是使用第一个和之前所做的更改,如果我不手动恢复对象,我的测试将无法使用执行测试后我所做的任何更改。
我明白 Javascript 这样做是为了提高效率,而不是一直加载同一个文件,而是只加载一次。
但是我如何进行测试,其中我有一个包含正确对象的文件,并且我想在每个测试中一个一个地引入小的修改?
有什么想法吗?
克隆对象。
在前函数中导入您的对象
https://futurestud.io/tutorials/mocha-global-setup-and-teardown-before-after
然后在每个函数或 beforeEach 函数中,使用类似 lodash 的 cloneDeep 函数克隆该对象。
有一个解决方案,即使更冗长,但它避免了在每次测试之前克隆对象,因为也许没有必要。
describe('Tests', () => {
const baseTestObject = require('./file.json');
it('should return false 1', () => {
const testObject = Object.assign({}, baseTestObject, { attribute1: null });
expect(function(testObject)).to.be.false;
});
it('should return false 2', () => {
const testObject = Object.assign({}, baseTestObject, { attribute2: null });
expect(function(testObject)).to.be.false;
});
按以下方式合并和克隆对象
const testObject = Object.assign({}, baseTestObject, { attribute2: null });
保持原来的 testObject,因此不影响其他测试。
我正在用 mocha 为 javascript API 编写一些测试。我在 运行 测试之前 docker 启动了我的项目,我意识到需要一个文件在多个测试中创建一个对象,例如像这些:
it('should return false 1', () => {
const testObject = require(./file.json)
delete testObject.neededAttribute1;
expect(function(testObject)).to.be.false;
});
it('should return false 2', () => {
const testObject = require(./file.json)
delete testObject.neededAttribute2;
expect(function(testObject)).to.be.false;
});
Javascript 不会在第二个测试中创建对象 testObject
,而是使用第一个和之前所做的更改,如果我不手动恢复对象,我的测试将无法使用执行测试后我所做的任何更改。
我明白 Javascript 这样做是为了提高效率,而不是一直加载同一个文件,而是只加载一次。
但是我如何进行测试,其中我有一个包含正确对象的文件,并且我想在每个测试中一个一个地引入小的修改?
有什么想法吗?
克隆对象。
在前函数中导入您的对象
https://futurestud.io/tutorials/mocha-global-setup-and-teardown-before-after
然后在每个函数或 beforeEach 函数中,使用类似 lodash 的 cloneDeep 函数克隆该对象。
有一个解决方案,即使更冗长,但它避免了在每次测试之前克隆对象,因为也许没有必要。
describe('Tests', () => {
const baseTestObject = require('./file.json');
it('should return false 1', () => {
const testObject = Object.assign({}, baseTestObject, { attribute1: null });
expect(function(testObject)).to.be.false;
});
it('should return false 2', () => {
const testObject = Object.assign({}, baseTestObject, { attribute2: null });
expect(function(testObject)).to.be.false;
});
按以下方式合并和克隆对象
const testObject = Object.assign({}, baseTestObject, { attribute2: null });
保持原来的 testObject,因此不影响其他测试。