2017-02-15 1 views
12

는 그와 같은 구성 요소가 있습니다. foo 메서드를 테스트하고 싶지만 액세스하는 방법을 모르겠습니다.Enzyme을 사용하여 하위 구성 요소 메소드를 테스트하는 방법은 무엇입니까?</p> <pre><code><Parent> <Child/> </Parent> </code></pre> <p>및 <code><Child/></code> 구성하는 방법 <code>foo</code> 있습니다

mount(<Parent><Child/></Parent>).props().children.foo 

또는

mount(<Parent><Child/></Parent>).children().foo 

을하지만 둘 다이 undefined이다 : 나는 시도했다. 루트가 아니기 때문에 .instance()을 사용할 수 없습니다. <Parent>context에 무언가 (react-router 's context.router)를 추가했기 때문에 <Child/>을 마운트 할 수 없으며 init <Child/>이 필요할 때만 필요합니다. 이걸로 어떤 생각?

+1

이것은 여전히 ​​불가능하거나 복잡합니다. https://github.com/airbnb/enzyme/issues/361 – Leonardo

+0

반응 성분을 트리에서 아래쪽으로 테스트하여 작업하십시오. 또한 반응 라우터에서 구성 요소의 종속성을 제거하기 위해 테스트를 위해 구성 요소의 포장을 풀지 않은 버전을 내 보냅니다. – therewillbecode

답변

0

귀하의 문제는 하위 구성 요소를 테스트하는 방법과 다른 것이라고 생각합니다.

첫 번째 질문은 다음과 같습니다. 하위 구성 요소에 상위 구성 요소 테스트에 특정 방법이 있는지 확인하는 이유는 무엇입니까?

이 구성 요소와 관련된 테스트가 필요하며이 테스트에서 메서드가 있는지 확인해야합니다.

답변을 남기지 않고 그냥 .find(Child).instance().foo을 시도 했습니까?

1

부모 클래스에 대해서만 테스트를 작성한 다음 자녀를 테스트하는 별도의 테스트 파일을 작성하는 것을 고려합니다.

const component = mount(<Child>); 

그것을 사용 방법입니다에 당신이 다음 액세스 할 수 있습니다 :

사용 부품을 장착하면

component.instance().methodname 

그런 다음 jest.fn과 재정을 같은 물건을 할 수 있습니다()와 적절하게 시험하십시오.