2017-06-06 10 views
1

を解決した後...テスト状態値の約束は、ログインを行うコンポーネント考える

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

    this.setState({isLogin: true}); 

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

どのように私は約束が解決された後isLogin状態がfalseの場合、検証テストを作成することができますか?

これまでのところ、私が持っている..

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

}); 

しかしhereが説明するように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

答えて

0

あなたは.resolves機能との約束の結果をテストしようとしたことがありますか?

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

または使用async/await

const result = await myPromise; 
expect(result).toEqual('SomeValue'); 
関連する問題