2017-12-18 3 views
0

다음 Mocha 테스트에서 예기치 않은 결과가 표시됩니다. 그 이유를 알 수 없습니다. Order 객체로 번역 된 객체를 웹 저장소에서 가져 왔습니다. 상대적으로 간단한 애트리뷰트 비교를 실행하려고 시도하고 있으므로 테스트를 반복하기로했습니다. for 루프에서의 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에서 사용하는 모델 객체입니다.

나는 부작용의 근원이었던 생각을 시도했지만 결과는 같았다.

답변

0

Order 개체에 부작용이있는 것으로 나타났습니다. Order 개체 내부에서 데이터 구조 개체를 가져 와서 값을 변경했습니다. 나는 var data = imported_data 대신에 var data = Object.assign({}, imported_data)으로 데이터 구조의 복사본을 만들어야했습니다.

신나는 실수! 여기에 도착했는데 이해가되지 않으면 this question을 참조하십시오.