在环路中Mocha测试中的副作用

时间:2017-12-18 21:39:32

标签: for-loop mocha chai

我看到了以下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))认为这是副作用的起源,但结果是一样的。

1 个答案:

答案 0 :(得分:0)

事实证明我的Order对象中存在副作用。在Order对象中,我正在导入数据结构对象并更改其值。我应该使用var data = Object.assign({}, imported_data)而不是var data = imported_data复制数据结构。

菜鸟错误!如果你已经到了这里并且你不明白,请参阅this question