2017-06-06 4 views
1

eine Komponente gegeben, die eine Login machen ...Test-Zustandswert nach Versprechen gelöst

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

    this.setState({isLogin: true}); 

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

Wie kann ich einen Test erstellen, die überprüfen, ob isLogin Zustand falsch ist, nachdem das Versprechen gelöst ist?

Bisher habe ich ..

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(), 
); 

}); 

Aber ein 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

Antwort

0

Haben Sie das Ergebnis der Versprechen mit .resolves Funktion zu testen versucht, wie here beschrieben?

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

Oder mit async/await:

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