2016-09-26 5 views
1

테스트 용으로 SinonEnzyme을 사용하고 있습니다. 개체 배열을 가져 와서 새로운 배열로 변환하는 함수가 있습니다.Sinon : 테스트 함수 반환 값

getContainersByHostId(data) { 
    return _.chain(data) 
     .groupBy('hostId') 
     .toPairs() 
     .map(currentItem => _.zipObject(['hostId', 'containers'], currentItem)) 
     .value(); 
    } 

인수 :

const containers = [{ 
      id: 'c_01', 
      hostId: 'h_01', 
      hostIp: '192.168.1.0', 
      name: 'Some Container' 
     }]; 

결과 :

[{hostId: 'h_01', 
containers: [{ 
hostId: 'h_01', 
ip: '192.168.1.0', 
id: 'c_01', 
name: 'Some Container' 
}]}]; 

이 잘 작동합니다. 그러나 내가 직면 한 문제는 단위 테스트에 있습니다. 그래서 저는 현재 이것을 가지고 있습니다.

const containers = [{ 
      id: 'c_01', 
      hostId: 'h_01', 
      hostIp: '192.168.1.0', 
      name: 'Indigo Container' 
     }]; 

     const wrapper = shallow(<Groups {...props} />); 
     const instance = wrapper.instance(); 
     sandbox.stub(instance, 'getContainersByHostId'); 
     instance.getContainersByHostId(containers); 
     expect(instance.getContainersByHostId.calledWith(containers)).to.equal(true); 
     }); 

args가 새 배열과 동일한 지 테스트하는 방법은 무엇입니까?

업데이트 : returnValue을 시도했지만 그것은 거짓 저를주고 내가 정말 돌아 있는지 확인하기 위해 가능한 모든 해결책을 찾을 수 없습니다

.

+0

정확히 명시 하시겠습니까? 입력 2 개, 예상 출력 2 번째 배열을 가져야합니다. 그래서 당신은 단지 그 입력을 가진'getContainersByHostId' 호출이 예상 된 결과를 리턴해야한다고 단언합니다. 이것이 당신이 성취하고자하는 것입니까? –

+0

그게 바로 제가 주장하고자하는 것입니다. 하지만 출력 배열에 대해 선언하면 정의되지 않습니다. 당신이 어쩌면 그것을 성취 할 수있는 예를 쓸 수 있습니까? 어쩌면 내가 뭔가 잘못하고있는 것 같아. 내 질문도 편집하겠습니다. – Umair

+0

@LazarevAlexandr – Umair

답변

2

먼저 함수를 스텁하는 경우 모든 동작을 취소하므로이 스텁의 일부 값을 지정하지 않으면 반환되는 값은 undefined입니다. 아마 당신은 sinon.spy()과 혼동했을 것입니다.

내가 올바르게 이해했다면 필요한 모든 것을 더 쉽게 얻을 수 있습니다. 필요 없음 시몬 전혀. 다음과 같음 :

const modified = instance.getContainersByHostId(inputArray);  
expect(modified).to.eql(expectedArray); 
+0

알았어, 내가 여기서 정말 바보 같은 짓을한다는 것을 알았다. 당신 말이 맞아요. 그러나 나는 당신의 첫 번째 요지를 확신하지 못합니다. 당신이 반환 값을 지정해야한다고 말했던 시점? 그걸 좀 자세히 설명해 주시겠습니까? 기본적으로 왜 그것이 '정의되지 않은'것을 던지고 있는지 이해하고 싶습니다. – Umair

+0

그리고 당신이 말한 것과 함께, 당신은 내가 수업 방법의 간첩이나 스텁을 할 필요가 없다고 말하고 있습니까? 원래 기능을 직접 주장한 적이 있으십니까? 나는 그 감명 아래 있었고, 우리는 간첩이나 스텁으로이 일을해야만 했단 말인가? 이 사실을 내게 깊이 설명 할 수 있다면 정말 감사 할 것입니다. – Umair

+0

테스트 케이스에 매뉴얼 함수 호출이 있기 때문에,'instance.getContainersByHostId (containers);'아무것도 스파이하거나 스텁 할 필요가 없습니다. 스텁 또는 감시 기능은 사용자가 기능 호출을 제어하지 않을 때 사용됩니다. 대부분의 경우 그들은 당신이 무언가를 호출 할 때 사정 된 방법을 유발하는 상황에서 사용됩니다. _specify return value_에 대해서는, 나는'stub.returns (obj);를 언급하고있었습니다.이 메소드는 스텁이 제공된 값을 리턴하도록합니다. Sinon API에 대한 자세한 내용은 다음을 참조하십시오. http://sinonjs.org/docs/ –