2016-08-23 1 views
1

나는 ReactiveDict을 사용하는 응용 프로그램을 만들고 있습니다. 내 프로젝트는 Mantra 사양과 함께 Meteor로 제작되었습니다.ReactDict에서 반응 소포를 효소로 시험하는 방법

나는 반응 성분이 Login입니다. 개념은 구성 요소 렌더링시 오류가 없으므로 구성 요소가 렌더링 될 때 ReactiveDict 상태가 지워집니다. 그래도 괜찮습니다. 컨테이너에이 코드가 있습니다.

export const depsMapper = (context, actions) => ({ 
    context:() => context, 
    loginUser:actions.login.loginUser, 
    clearState: actions.globals.clearState 
}); 

다음은 구성 요소가 수행 할 작업입니다. 내 구성 요소에서 :

componentWillMount(){ 
    this.props.clearState('LOGIN_ERROR_MESSAGE'); 
} 

마지막으로, 내 테스트 코드에서, 내가 가진 :

it.only('should render a <Form/> component',() => { 
    const loginWrapper = shallow(<Login/>); 
    expect(loginWrapper.find(Form)).to.have.length(1); 
}); 

내가 npm test를 실행하면 this.props.clearState는 함수가 아닙니다 말한다. 이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.

답변

0

언 마운트시 오류를 제거하는 것이 더 편리하다고 생각하십니까? ReactiveDict는 어쨌든 영속적이지 않으므로 언 마운트시 상태 지움 - 페이지를 새로 고치거나 구성 요소를 마운트 해제하면 오류가 이미 제거됩니다. 따라서 마운트하기 전에 상태를 지울 이유가 없습니다. 일반적으로 Mantrajs에서 이와 같은 작업을 수행합니다.

export const composer = ({context, clearState}, onData) => { 
    const {LocalState} = context(); 
    const error = LocalState.get('LOGIN_ERROR_MESSAGE'); 
    onData(null, {error}); 

    // return the function that clears the state and the state gets reset on unmount 
    return clearState; 
}; 

export const depsMapper = (context, actions) => ({ 
    context:() => context, 
    loginUser: actions.login.loginUser, 
    clearState: actions.globals.clearState 
}); 

export default composeAll(
    composeWithTracker(composer), 
    useDeps(depsMapper) 
)(Login); 
관련 문제