2017-04-25 5 views
0

난 그냥 래핑 된 구성 요소에 대한 테스트를 수행하는 방법을 알아 내려고 노력하고 있습니다. 구성 요소에 redux state prop를 올바르게 정의하려면 어떻게해야합니까?Jest Redux 테스트 문제

연결과 PendingContract ●/돌아 오는> +++ 연결된 (SMART) 구성 요소를 렌더링

TypeError: Cannot read property 'find' of undefined 

원본 구성 요소 코드 :

// Dependencies 
import React, { Component } from 'react'; 
import CSSModules from 'react-css-modules'; 
import { connect } from 'react-redux'; 
import * as actions from '../../../../actions'; 
import PendingContractDetail from './pending-contract- 

detail/PendingContractDetail'; 

// CSS 
import styles from './PendingContract.css'; 

export class PendingContract extends Component { 

    componentWillMount() { 
    this.props.getSinglePendingContract(this.props.params.contract); 
    } 

    render() { 
    let contract; 
    if (this.props.contract) { 
     const contractDetails = this.props.contract; 
     contract = (
     <PendingContractDetail 
     accepted={contractDetails.accepted} 
     contractId={contractDetails.contractId} 
     contractName={contractDetails.contractName} 
     details={contractDetails.details} 
     status={contractDetails.status} 
     timeCreated={contractDetails.timeCreated} 
     type={contractDetails.type} /> 
    ); 
    } else { 
     contract = 'Loading...' 
    }; 

    return (
     <div className='row'> 
     <div className='col-xs-12 col-sm-12 col-md-12'> 
      {contract} 
     </div> 
     </div> 
    ); 
    } 
} 

function mapStateToProps(state) { 
    return { 
    contract: state.pendingContracts.contract 
    } 
} 

const PendingContractWithCSS = CSSModules(PendingContract, styles); 

export default connect(mapStateToProps, actions)(PendingContractWithCSS); 

테스트 코드를 다음과 같이

import React from 'react'; 
import reduxThunk from 'redux-thunk'; 
import { Provider } from 'react-redux'; 
import { shallow, mount } from 'enzyme'; 
import PendingContract from './PendingContract'; 

import configureStore from 'redux-mock-store'; 

jest.mock('react-css-modules',() => Component => Component); 

describe('PendingContract with connect/Redux',() => { 
    const initialState = { 
    contract: { 
     accepted: true, 
     contractId: 1234, 
     contractName: 'Test Contract', 
     details: { test: 'test'}, 
     status: 'Accepted', 
     type: 'Sports' 
    } 
    }; 

    const mockStore = configureStore([reduxThunk]) 
    let store,wrapper; 

    beforeEach(()=>{ 
    store = mockStore(initialState) 
    wrapper = mount(<Provider store={store}><PendingContract {...initialState} /></Provider>) 
    }) 

    it('+++ render the connected(SMART) component',() => { 
    expect(wrapper.find(PendingContract).length).toEqual(1) 
    }); 

    // it('+++ check Prop matches with initialState',() => { 
    // expect(wrapper.find(PendingContract).prop('contract')).toEqual(initialState.contract) 
    // }); 
}); 

답변

0

mount로 완전히 테스트하려는 경우 연결된 구성 요소를 가져와야합니다.

import React from 'react'; 
import reduxThunk from 'redux-thunk'; 
import { Provider } from 'react-redux'; 
import { shallow, mount } from 'enzyme'; 
import ConnectedPendingContract, { PendingContract } from './PendingContract'; 
import configureStore from 'redux-mock-store'; 

jest.mock('react-css-modules',() => Component => Component); 

describe('PendingContract with connect/Redux',() => { 
    const initialState = { 
    contract: { 
     accepted: true, 
     contractId: 1234, 
     contractName: 'Test Contract', 
     details: { test: 'test'}, 
     status: 'Accepted', 
     type: 'Sports' 
    } 
    }; 

    const mockStore = configureStore([reduxThunk]) 
    let store,wrapper; 

    beforeEach(()=>{ 
    store = mockStore(initialState) 
    wrapper = mount(<Provider store={store}><ConnectedPendingContract {...initialState} /></Provider>) 
    }) 

    it('+++ render the connected(SMART) component',() => { 
    expect(wrapper.find(PendingContract).length).toEqual(1) 
    }); 

    // it('+++ check Prop matches with initialState',() => { 
    // expect(wrapper.find(PendingContract).prop('contract')).toEqual(initialState.contract) 
    // }); 
}); 
+0

나는 그것을 조정하는 경우에도 :에서 수입 PendingContract './PendingContract'; 같은 오류가 발생했습니다. – Tulun

+0

테스트 케이스 안에 wrapper를 console.log하고 포함 된 내용을 게시 할 수 있습니까? – Shota

+0

결과를 로깅하는 데 문제가 있습니다. 테스트에 영향을 미치지 않습니다 (이 프로젝트의 상용구로 create-react-app 사용) – Tulun