2016-07-13 2 views
3

사용자가 클릭 할 때 간단한 확인 창이 열리는 React에 버튼이 있습니다. 확인 방법을 추가하기 전에 아래의 테스트가 녹색이었습니다. 추가 후 빨간색임을 확인합니다. 추가 확인 작업을하려면 테스트를 어떻게 변경해야합니까?효소를 사용하는 반응 확인 창

이 삭제 버튼 반응 :

describe('<DeleteButton />',() => { 
    it("deletes the entry",() => { 
    const onDelete = sinon.spy(); 
    const props = {id: 1, onDelete: onDelete}; 
    const wrapper = shallow(<DeleteButton {...props} />); 
    const deleteButton = wrapper.find(Button); 

    deleteButton.simulate("click"); 
    expect(onDelete.calledOnce).to.equal(true); 
    }); 
}); 

답변

5

sinon.stub를 사용 confirm 스터브 수

여기
const DeleteButton = (props) => { 
    const handleDelete =() => { 
    if(confirm("Are you sure?")) { 
     props.onDelete(props.id) 
    } 
    }; 

    return (
     <Button className="btn" onClick={handleDelete}> 
     <i className="fa fa-trash-o"></i> 
     </Button> 
); 
}; 

는 (효소를 사용하여) 검사한다.

describe('<DeleteImportButton />',() => { 
    it("simulates delete event",() => { 
    const onDeleteImport = sinon.spy(); 
    const props = {id: 1, onDelete: onDeleteImport}; 
    const wrapper = shallow(<DeleteImportButton {...props} />); 
    const deleteButton = wrapper.find(Button); 

    const confirmStub = sinon.stub(global, 'confirm'); 
    confirmStub.returns(true); 
    deleteButton.simulate("click"); 
    expect(confirmStub.calledOnce).to.equal(true); 
    expect(onDeleteImport.calledOnce).to.equal(true); 

    confirmStub.restore(); 
    }); 
}); 
+0

답장을 보내 주셔서 감사합니다. 테스트는 여전히 false를 반환합니다. 단지 궁금한 점이있어서 제 질문을 더 간단하게하기 위해 제 질문에서 가져온 참조를 제거했습니다. – Linus

+1

테스트를 실행하기 위해 실제 브라우저를 사용하고 있습니까? 갈마 곁에 말해봐? 'const confirmStub = sinon.stub (global, 'confirm');'을 시도해보십시오. 'confirmStub'가 실제로 호출되었는지 확인하십시오. –

+0

아니요 브라우저를 사용하지 않고'npm test'를 실행하고 있습니다. 'const confirmStub = sinon.stub (global, 'confirm');'성공했습니다. 고마워요! – Linus