给定一个登录的组件......
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(),
);
});
但是一个例外
[mobx]遇到一个由反应或观察者组件引发的未捕获异常,在:&#39;反应[当@ 21] TypeError:无法读取属性&#39; state&#39;未定义的
答案 0 :(得分:0)
编辑: 问题编辑后,此答案不再适用。
您是否尝试使用here描述的.resolves
函数测试承诺的结果?
expect(myPromise).resolves.toEqual('SomeValue');
或使用async/await:
const result = await myPromise;
expect(result).toEqual('SomeValue');