2017-12-18 17 views
0

次のモカテストでは予期しない結果が見られますが、その理由を理解できません。私はOrderオブジェクトに翻訳されるWebストアのオブジェクトをたくさん持っています。私は比較的単純な属性比較を多く実行しようとしているので、私はテストをループすることに決めました。for-loopでのMochaテストの副作用

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 app downstreamで使用するモデルオブジェクトです。

私は副作用の起源であったと考えてorder = new Order(Object.assign({}, translated_order))しようとしましたが、結果は同じでした。

答えて

0

私のOrderオブジェクトの中に副作用があったことが判明しました。 Orderオブジェクト内では、データ構造オブジェクトをインポートしてその値を変更していました。 var data = imported_dataの代わりにvar data = Object.assign({}, imported_data)というデータ構造のコピーを作成していたはずです。

ルーキーミス!ここに来て理解できない場合は、this questionをご覧ください。