我看到了以下Mocha测试的意外结果,我无法弄清楚原因。我有一堆来自网上商店的对象被转换为Order对象。我正在尝试运行许多相对简单的属性比较,所以我决定循环我的测试。
import assert from 'assert'
import {expect} from 'chai'
...
const test_orders = [ <a bunch of objects> ]
function order_test(order, expected_values) {
describe(`Order#new ${expected_values.expected_package_type}`, () => {
...
})
}
for (var i = 0; i < test_orders.length; i++){
let translated_order = {}, order = {};
translated_order = new TranslateOrder(test_orders[i].untranslated_params)
order = new Order(translated_order)
order_test(order, test_orders[i]);
}
问题是我根据对象在test_orders
中出现的顺序得到不同的测试结果,这告诉我我得到了意想不到的副作用。我无法弄清楚他们来自哪里。任何帮助将不胜感激!
如果
translated_order = new TranslateOrder(test_orders[i].untranslated_params)
order = new Order(translated_order)
有点是罪魁祸首,我怀疑,我很想知道该做些什么。它有点涉及,但在一句话中,TranslateOrder
从JSON字符串创建一个对象,而Order
是我在我的React应用程序下游使用的模型对象。
我确实尝试order = new Order(Object.assign({}, translated_order))
认为这是副作用的起源,但结果是一样的。
答案 0 :(得分:0)
事实证明我的Order
对象中存在副作用。在Order
对象中,我正在导入数据结构对象并更改其值。我应该使用var data = Object.assign({}, imported_data)
而不是var data = imported_data
复制数据结构。
菜鸟错误!如果你已经到了这里并且你不明白,请参阅this question。