【发布时间】:2018-03-24 02:36:25
【问题描述】:
我有一个这样的测试失败,因为没有调用模拟,问题是模拟被调用但在测试完成之前。
test('should submit if proper values', () => {
const spy = jest.fn().mockReturnValue({
data: {
authenticateUser: {
id: 123,
token: 'lol'
}
}
});
mountedWrapper.setProps({
loginMutation: spy
});
expect(spy).not.toHaveBeenCalled();
email.simulate('change', {
target: { name: 'username', value: 'email@test.com' }
});
password.simulate('change', {
target: { name: 'password', value: 'secret' }
});
form.simulate('submit');
expect(spy).toHaveBeenCalled();
});
但是,如果我添加以下 setTimeout,我可以通过测试
setTimeout(() => {
expect(spy).toHaveBeenCalled();
}, 0);
但是,我正在寻找一种更好的方法来解决上述问题。没有 setTimeout 的任何解决方案?
【问题讨论】:
-
你能多写一些关于挂载 Wrapper 的代码 sn-ps,电子邮件来自哪里等吗?
-
抱歉,你的代码还是有点不清楚。在
form上模拟submit时会发生什么。loginMutation是直接调用的,还是在一些动作之后调用的?能否请您添加 sn-ps 以说明这一点? -
是通过还是误报?我的意思是,如果你在你的
setTimeout中添加一个expect(true).toBe(false),它还会通过吗?