2016-08-23 6 views
1

Я работаю над приложением, которое использует ReactiveDict. Мой проект построен с помощью Meteor с спецификацией Mantra.Как проверить действия реквизита от ReactiveDict внутри реактивного компонента с Enzyme

У меня есть реактивный компонент с именем 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);