Javascript 在多次使用同一模拟对象/数组时,如何在没有引用的情况下为测试导入模拟数据
我正试着做一些角度测试。为此,我将复杂对象(对象中的对象)与其他模拟数据存储在单独的文件中 每个模拟对象都与模拟数据文件中的导出关联 在测试文件中,我导入了测试所需的对象。除了,有时我不得不在几个测试中使用相同的模拟数据。多个测试函数使用相同的数据并修改其输入数据 所以我的问题是,我“加载”我的模拟数据,我在测试中使用它们,测试会更改数据,对于其他需要模拟数据的测试,数据没有处于正确的“状态” 在我的例子中,使用库深度克隆模拟数据是不可行的Javascript 在多次使用同一模拟对象/数组时,如何在没有引用的情况下为测试导入模拟数据,javascript,angular,unit-testing,reference,Javascript,Angular,Unit Testing,Reference,我正试着做一些角度测试。为此,我将复杂对象(对象中的对象)与其他模拟数据存储在单独的文件中 每个模拟对象都与模拟数据文件中的导出关联 在测试文件中,我导入了测试所需的对象。除了,有时我不得不在几个测试中使用相同的模拟数据。多个测试函数使用相同的数据并修改其输入数据 所以我的问题是,我“加载”我的模拟数据,我在测试中使用它们,测试会更改数据,对于其他需要模拟数据的测试,数据没有处于正确的“状态” 在我的例子中,使用库深度克隆模拟数据是不可行的 我知道创建递归方法(或使用json parse+str
我知道创建递归方法(或使用json parse+stringify)可以解决我的问题,但我想知道是否还有其他可用选项。就像从文件中重新导入数据一样,也许?最后,我使用了一个递归函数来克隆复杂对象/数组的任意组合
public clone(obj: any): any {
if (null == obj || 'object' !== typeof obj) return obj;
const copy = obj.constructor();
if (Array.isArray(obj)) { // property value is an array
for( const val of obj) {
if('object' === typeof val) {
copy.push(this.clone(val));
} else {
copy.push(val);
}
}
} else {
for (const attr of Object.keys(obj)) {
if('object' === typeof obj[attr]) { // property value is an object
copy[attr] = this.clone(obj[attr]);
} else {
copy[attr] = obj[attr];
}
}
}
return copy;
}
我还认为动态导入可以帮助解决这个问题,每次需要新的mockedData时都导入它