2017-10-18 10 views
3

양식 구성 요소를 테스트하기 위해 Jest and Enzyme을 사용하고 있으며 클릭 시뮬레이션이 작동하는 데 문제가 있습니다. 참고 : Button는 스타일 rebass 버튼이며,이 같은 형태로 존재 : 여기 enzyme simulate해야 할 때 '클릭'이 작동하지 않습니다.

<Button 
    type="reset" 
    disabled={pristine || submitting} 
    onClick={() => onClose(dirty)} 
> 

실패있어 테스트입니다 :

it('should handle the onClose event',() => { 
     const onCloseSpy = jest.fn(); 
     const renderedComponent = mount(renderFormUtil({ onClose: onCloseSpy })); 
     expect(onCloseSpy).not.toHaveBeenCalled(); 
     console.log(renderedComponent.find(Form).props().onClose); 
     renderedComponent 
     .find(Button) 
     .first() 
     .simulate('click'); 
    expect(onCloseSpy).toHaveBeenCalled(); 
    }); 

여기에 주목해야한다 무엇이라고 나는 대체하는 경우 다음과 같은 라인을 시뮬레이션하십시오 :

갑자기 내 테스트가 통과합니다. 이것이 어떻게 가능한지? onClick 소품이 정확하다면 클릭 이벤트가 소품을 올바르게 호출하지 않는다는 뜻입니까?

+0

를? 'Button '이 어떤 모양인지는 모르겠지만 두 개의 다른 구성 요소를 테스트 중이므로 같은 결과는 기대하지 않습니다. –

+0

죄송합니다. 그 구성 요소는 같습니다. 구성 요소 이름에 Submit라는 단어가 없으므로 단순화되었습니다. –

답변

0

.find 두 개가 서로 다른 선택기를 사용하기 때문에 두 구성 요소가 동일한 구성 요소를 선택하는지 확실하지 않습니다. 이것과 결합하여 .first()을 사용하고 있으며 샘플 코드로 주문에 대해 확신 할 수 없습니다.
.first()을 사용하지 않고 원하는 구성 요소를 .find으로 가져 오는 대신 더 구체적인 선택기를 사용할 수 있습니다. 이를 위해 특정 ButtonSubmit에 대한 id을 추가하고 같은 선택 사용할 수 있습니다 : 당신은`다른에서`.find`한 경우 (ButtonSubmit)와`.find (버튼)를 사용하는 이유는 무엇입니까
.find('ButtonSubmit[id="foo"]')

+0

죄송합니다. 방금 질문을 수정했습니다. ButtonSubmit이 있어서는 안됩니다. 나는이 질문을하기 위해 그 이름의 일부를 없애 버렸으므로 그것이 더 간단해질 것이지만 분명히 철저한 일을하지는 않았다. 그들은 AFAIK라는 동일한 요소를 선택해야합니다. –