node.js - 需要 JSON 作为深拷贝
问题描述
我现在正在为我的节点应用程序编写测试。我有用于测试数据的固定装置,但遇到了问题,当我在一个方法中更改它们中的任何一个时,它们也会针对所有其他测试进行全局更改,这显然与引用有关。现在我想如果我将我的固定装置写入 JSON 并要求每个文件中包含 JSON,那么它们将为每个文件具有唯一的引用,现在事实证明,它们没有。我的问题是:有没有一种简单的方法来处理 Node 中的固定装置,这样每个文件都有一个固定装置的实例,它不会影响其他测试文件。
我目前在每个测试文件中导入我的夹具的方式:
const {fixture1, someOtherFixture } = require('../../../../../fixtures/keywords.json');
解决方案
require
调用被缓存,所以一旦你调用它,连续调用将返回相同的对象。
您可以执行以下操作:
const {fixture1, someOtherFixture } = require('../../../../../fixtures/keywords.json');
const fixtureCopy = JSON.parse(JSON.stringify(fixture1));
const someOtherFixtureCopy = JSON.parse(JSON.stringify(someOtherFixtureCopy));
或使用一个包:
const deepcopy = require('deepcopy');
const {fixture1, someOtherFixture } = require('../../../../../fixtures/keywords.json');
const fixtureCopy = deepcopy(fixture1);
const someOtherFixtureCopy = deepcopy(someOtherFixtureCopy);
或者更改您的模块以导出一个每次都会返回新副本的函数。这是我认为推荐的方法。
module.exports = {
get() {
return deepcopy(fixture); // fixture being the Object you have
}
}
const fixture = require('./fixture');
const fixture1 = fixture.get();
推荐阅读
- javascript - 触发点击事件需要多长时间?
- python - 如何在使用 pandas 导入 csv 文件期间有效地删除重叠行?
- spring - RestController 无法正常工作
- c# - 如何处理 AMP 页面中已删除的推文
- angular - 奇怪的 *ngFor 问题
- javascript - 如何让浏览器在发起跨域HTTP请求时包含主机源域的cookies
- angular - 父 li 上的单击侦听器还注册了对子 ul li 子菜单的单击
- python - 如何在只读模式下设置输入的值
- flask - 在 anaconda Prompt 上运行 FLASK 时出错
- java - 如何在终端中使用 .jar 文件?