2017-10-01 9 views
3

나는 효소를 사용하고 있습니다. 응답 라우터 링크가있는 구성 요소를 테스트해야합니다. 나는 그것을 속성이 변경 될 때 전체 컴포넌트 트리를 구성 요소의 반응 라우터를 포함하는 테스트 구성 요소 효소와 링크

  • 테스트 동작을 테스트해야하기 때문에 다음

    • 이 효소의 마운트()를 사용하여 구성 요소를 장착해야합니다.

    효소가 루트 수준에서 setProps() 만 허용하므로 내 구성 요소를 StaticRouter 또는 MemoryRouter로 래핑 할 수 없습니다.

    내 현재 솔루션은 링크 렌더링 메서드를 sinon으로 스텁하는 것입니다. 다음은 간단한 예입니다.

    import {Link} from 'react-router-dom'; 
    import sinon from 'sinon'; 
    
    // .... 
    // .... 
    
    describe('test',() => { 
        before(() => { 
         sinon.stub(Link.prototype, 'render').callsFake(function reactRouterLinkRender() { 
          const {innerRef, replace, to } = this.props; 
          const _props = {href: to, ref: innerRef, replace, onClick: this.handleClick}; 
          return (<a {..._props}>this.props.children</a>); 
         }); 
    
        }); 
    }); 
    

    오류 ": 당신은 라우터 외부 링크를 사용해서는 안 불가 위반"을 피하기 위해 더 좋은 방법이 있나요?

    감사

  • 답변

    0

    이 사람이 도움이하지만 내 경우에 나는 얕은 내가 필요한 부분에 도착 다이빙()를 사용하여 다음 최상위 요소를 렌더링에 의해 해결하기 위해 관리하는 경우 확실하지.

    loginPage = shallow(<LoginPage />); 
    

    ....

    loginPage.find(LoginForm).dive().find({name:"user"}).simulate("change", userEventMock);