2016-06-21 3 views
2

내가 효소 + Sinon을 uszing 반응 구성 요소에 대한 클릭을 테스트하기 위해 노력하고있어 반응sinon 스텁 구성 요소

var stub = sinon.stub(Comp.prototype, 'save', function() { }); 

let wrapper = shallow(
    <Comp/> 
); 

wrapper.find('.btn-header').simulate('click'); 
sinon.assert.called(stub); 

Comp.prototype.refineOnClick.restore(); 

내 경화제 구성 요소 예외를 throw 저장 기능이

save: function() { 
    throw('error'); 
} 

테스트를 실행할 때 오류가 발생하지 않고 스텁의 비어있는 기능이 실행되기를 기대하지만 그렇게하지는 않습니다. 구성 요소 내부의 실제 함수가 실행되고 빈 스텁은 실행되지 않습니다.

+1

죄송합니다. 귀하의 스텁 또는 귀하의 일반 기능을 부르지 않거나 귀하의 스텁이 아닌 귀하의 일반 기능을 부르는 것이 유감입니다. –

+0

테스트가 스텁을 호출하지 않거나 실제 세이브 (save) 함수를 호출하지 않는다는 것을 의미한다면 어떻게 할 수 있습니까? 에서와 같이 오류가 발생하지만 스텁을 호출하지 않습니까? – ZekeDroid

+0

@BenHare 그것은 스텁이 아닌 정규 함수를 호출합니다. – NiRR

답변

0

단위 테스트의 원칙 중 하나는 테스트중인 유닛의 내부를 위조해서는 안된다는 것입니다. 테스트가 읽기 쉽고 유지 보수가 쉽지 않습니다. 방법 save은 분명히 Comp의 내부이므로 가짜가 아니어야합니다.

해당 구성 요소에 매개 변수로 전달한다면 그것은 확인을 것 :

var stub = sinon.stub(); 

let wrapper = shallow(
    <Comp onSave={stub} /> 
); 

wrapper.find('.btn-header').simulate('click'); 
sinon.assert.called(stub); 
+0

@NiRR, 원래의 질문에 첨부 된 내 의견에 이어, luboskrnac의 예제에서'save' 메소드는'this.props.onSave'를 호출해야합니다. –

1

당신은이 인스턴스의 사용하여 효소 래퍼 (따라서 스텁과) 기능에 액세스 할 수 있습니다. 따라서 구성 요소의 저장 기능을 테스트하려면 다음을 수행하십시오

const wrapper = shallow(<Comp />) 
sinon.stub(wrapper.instance(), 'save') 
wrapper.find('.btn-header').simulate('click') 
expect(wrapper.instance().save).to.have.been.called 

주, 나는 에 대한 sinon-차이 구문을 .to.have.been.called 사용하고 있습니다.

관련 문제