摩卡测试的副作用



我看到了以下摩卡测试的意外结果,我无法弄清楚原因。我从一个网站商店中有一堆对象,这些对象被翻译成订单对象。我正在尝试运行许多相对简单的属性比较,因此我决定在测试上循环。

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)

bit是罪魁祸首,我怀疑,我很想知道该怎么做不同。这有点涉及,但是在一句话中,TranslateOrder从JSON字符串中创建一个对象,而Order是我在下游React App中使用的模型对象。

我确实尝试过order = new Order(Object.assign({}, translated_order))认为这是副作用的起源,但结果是相同的。

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

新秀错误!如果您到这里而您不明白,请参阅此问题。

最新更新