2017-06-06 2 views
1

Étant donné un élément qui font une connexion ...test valeur d'état après la promesse résolue

onSubmit(e) { 
    e.preventDefault(); 
    const { userStore, data } = this.props; 

    this.setState({isLogin: true}); 

    const promise = userStore.login(data); 
    promise.then(() => { 
    this.setState({isLogin: false}); 
    }) 
} 

Comment puis-je créer un test qui valident si l'état isLogin est faux après la promesse est résolu?

Jusqu'à présent, j'ai ..

it('resolved submit should set isLogin to false',() => { 
    mockApi.onPost('/authenticate').reply(200); 

    const userStore = new UserStore(); 
    let fromPromiseLogin; 
    userStore.login = jest.fn() 
    .mockImplementationOnce((data) => { 
     fromPromiseLogin = userStore.login(data); 
     return fromPromiseLogin; 
    }); 
    const wrapper = mount(
    <FormLogin userStore={userStore} />, 
); 

    wrapper.find('form').simulate('submit'); 

    // HOW CAN I WAIT/OR CALLBACK FOR THE PROMISE ? I TRIED > 
    whenWithTimeout(
    () => fromPromiseLogin && fromPromiseLogin.state !== PENDING, 
    () => expect(wrapper.state().isLogin).toBeFalsy(), 
); 

}); 

Mais une exeption

[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: 'Reaction[[email protected]] TypeError: Cannot read property 'state' of undefined

Répondre

0

Avez-vous essayé de tester le résultat de la promesse avec .resolves fonction comme décrit here?

expect(myPromise).resolves.toEqual('SomeValue'); 

Ou en utilisant async/await:

const result = await myPromise; 
expect(result).toEqual('SomeValue');