2017-01-22 3 views
0

내 소스 코드 :모카와 차이 티, 어떻게 모의 결과를 기대할 수 있습니까?

function getElementCountOfArray(arr) { 
    var countObj = {}; 
    arr.forEach((element) => { 
     if(countObj[element]) { 
      countObj[element] ++; 
     } else { 
      countObj[element] = 1; 
     } 
    }); 

    return countObj; 
} 

module.exports = getElementCountOfArray; 

내 테스트 코드 :

describe('getElementCountOfArray', function() { 

    it('test case 1', function() { 
     var numArray = [2, 2, 3, 6, 7, 7, 7, 7, 8, 9]; 

     var result = { 
      2: 2, 
      3: 1, 
      6: 1, 
      7: 4, 
      8: 1, 
      9: 1 
     }; 

     expect(getElementCountOfArray(numArray)).to.eql(result); 
    }); 
}); 

result은 자신에 의해 계산이다 정말 생각이 올바르지 않습니다.

result이 복잡한 데이터 구조 인 경우 수동으로 계산하는 것은 좋지 않습니다. result에 대해 실수를 할 수 있습니다.

따라서 expect 결과를 시뮬레이션하는 "올바른"방법은 무엇입니까?

답변

2

단위 테스트가 어떻게 작동하는지 어떻게 말할까요? SUT (System Under Test)가 반환하는 결과, 즉 테스트중인 메소드는 SUT에서 수행 된 처리 결과입니다. 을 시험하기 위해서는 최종 결과가이어야 함을 알아야합니다. 따라서 간단한 스터브 예상 값 인 이 정확하다는 가정하에 SUT 결과를 테스트하는 것이 좋습니다. 물론 일부 결과는 복잡한 데이터 구조 일 수 있지만 단 하나 또는 두 개의 요소를 사용하여 예상되는 구조를 스텁하도록 선택할 수 있습니다.

다시 한 번 예상되는 값은 아무리 복잡한 것이 든 쉽게 검증 할 수 있어야하며 누군가가 SUT의 마른 실행을 사용하여 도착할 수있을만큼 단순해야합니다. 희망이 귀하의 질문에 대한 답변.

+0

감사합니다. 완전하게 이해할 수 없다, 나는 그것이 최종 결과를'기대'해야만한다는 의미인가? 그렇다면, 필자는 머리 속에'function'을 실행하고'result'를 주어야합니다. – novaline

+0

나는'당신이'(실제 결과) .toql (예상 결과)'를 할 때 당신의 머리 속에 '예상 된 결과'를 많이 계산해야한다는 것을 의미했다. 쉽게 만들 수 있도록 아주 단순한 데이터 구조를 고려해보십시오. 예를 들어, numArray = [2, 2]를 사용하여 예상 결과를 계산할 수 있습니다. – Piyush

+0

하지만 단순한 경우 충분히 테스트 할 수 없다고 생각합니다. 어쩌면 나는 '기능'을 가능한 한 작게 만들어야 할까? 따라서 쉽게 테스트 할 수 있습니다. – novaline

관련 문제