多次使用相同的模拟 object/array 时,如何在没有引用问题的情况下为测试导入模拟数据
How to import mocked data for a test without references issues when using the same mocked object/array several times
我正在尝试 运行 对 angular 进行一些测试。为此,我将复杂对象(对象中的对象)与其他模拟数据一起存储在单独的文件中。
每个模拟对象都与模拟数据文件中的导出相关联。
在测试文件中,我导入了测试所需的对象。除了,有时我必须对多个测试使用相同的模拟数据。几个经过测试的函数正在使用相同的数据并正在修改它们的输入数据。
所以我的问题是我“加载”了我的模拟数据,我在测试中使用它们,测试更改了数据,对于需要模拟数据的其他测试,数据不处于正确的“状态”。
在我的情况下,使用库深度克隆模拟数据不可行。
我知道创建递归方法(或使用 json parse+stringify)可以解决我的问题,但我想知道是否还有其他可用选项。比如从文件中重新导入数据?
最后我使用递归函数克隆了复杂的任意组合objects/arrays
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;
}
我还认为动态导入可以帮助解决这个问题,方法是每次需要时都像新的一样导入模拟数据。
我正在尝试 运行 对 angular 进行一些测试。为此,我将复杂对象(对象中的对象)与其他模拟数据一起存储在单独的文件中。
每个模拟对象都与模拟数据文件中的导出相关联。
在测试文件中,我导入了测试所需的对象。除了,有时我必须对多个测试使用相同的模拟数据。几个经过测试的函数正在使用相同的数据并正在修改它们的输入数据。
所以我的问题是我“加载”了我的模拟数据,我在测试中使用它们,测试更改了数据,对于需要模拟数据的其他测试,数据不处于正确的“状态”。
在我的情况下,使用库深度克隆模拟数据不可行。
我知道创建递归方法(或使用 json parse+stringify)可以解决我的问题,但我想知道是否还有其他可用选项。比如从文件中重新导入数据?
最后我使用递归函数克隆了复杂的任意组合objects/arrays
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;
}
我还认为动态导入可以帮助解决这个问题,方法是每次需要时都像新的一样导入模拟数据。