2016-08-12 2 views
0

Enzyme 얕은 렌더링을 사용하여 테스트중인 SFC가 있습니다. 이 상태없는 구성 요소에 인라인 스타일이 포함 된 스타일 객체를 전달합니다. 그러나 단위 테스트를 적용하면 정의되지 않은 값이 반환됩니다. 이 구성 요소가 소품으로 전달 된 내용을 반환하고 아무것도 전달/렌더링되지 않아 내게 정의되지 않은 것을 알았으므로 괜찮은지 확실하지 않습니다. 이 문제를 해결할 수있는 방법이 있습니까?효소 : Stateless Functional Component가 정의되지 않은 소품을 반환합니다.

const LoginForm = ({ style, handleSubmit }) => { 
    return (
    <form onSubmit={handleSubmit}> 
     <div style={_.get(style, 'container')}> 
     {inputFields} 
     </div> 
    </form> 
); 
}; 

테스트 :

it('should apply styles to first div',() => { 
     const wrapper = shallow(<LoginForm style={{display: 'inline'}}/>); 
     expect(wrapper.find('div').first().prop('style')).to.eql({display: 'inline'}); 
     }); 
+1

이 비교하려고 할 때 당신이 container 속성이 없습니다 공급하고있는 객체 때문에, 사업부의 style 소품 {style: undefined}으로 동일하며, 테스트가 실패합니다? –

+0

@MichaelParker 업데이트 – Umair

답변

1

이 실패하는 이유에 대한 몇 가지 이유가있다.

처음에는 Enzyme 얕은 래퍼 API를 잘못 사용하고있는 것으로 보입니다.

얕은 래퍼에서 특정 소품을 얻으려면 .props() (즉, 's'을 잊어 버렸습니다)을 사용해야합니다.

wrapper.find('div').first().props('style') 

그러나, 테스트에, 당신은 style 소품으로 {display: 'inline'}을 통과하고 있기 때문에 심지어이 수정과 함께, 테스트는 여전히 실패 할 것이다, 그러나 당신은 당신의 구현 container라는 속성에 대해 찾고 있습니다. lodash.get을 사용하고있는 것으로 가정합니다.이 메시지는 gets the value at the path of an object입니다. 당신은뿐만 아니라 단위 테스트 코드를 게시 할 수 {display: 'inline'}

+0

그건 실제로 해결책이었습니다. 나는 실제로 그것을 알아낼 수 있었다. 그러나 그것은 정확하다. 나는 이것을 대답으로 표시 할 것이다. 고맙습니다. – Umair

+0

또 하나 더,'.prop (key)'도 잘 작동합니다. 그것은 문서에 있습니다. https://github.com/airbnb/enzyme/blob/master/docs/api/ShallowWrapper/prop.md – Umair

+0

허, 나는 몰랐다. 내가 왜 당신의 코드를 복사하고 그것을 시도했을 때 그것이 나를 위해 일하지 않고 있었는지 궁금해. 정보 주셔서 감사! –