这是我的代码的大部分:
it("saving flow (entering into edit mode and saving) works correctly", (done) => {
const wrapper = mount(
<Root>
<DictionaryRooms/>
</Root>
);
moxios.wait(() => {
wrapper.update();
wrapper.find('.btn-dark').at(1).simulate('click');
setTimeout(() => {
expect(wrapper.find('.editField span').at(0).text().trim()).toEqual(jsonDataRooms.data[0].name);
}, 1000);
done();
wrapper.unmount();
})
});
因此,您可以看到我想模拟单击按钮,这在我的应用程序中导致从后端服务器下载一些新数据。在我的后端数据输入之后,这些数据将立即可见,然后将其显示出来。因此,在完成请求之后,我再次尝试检查新数据是否是我期望的值。 显然,单击后需要下载一些时间,过一会儿就会显示出来。这就是为什么我需要类似setTimeout的原因。但这行不通。不知道为什么...
感谢您的任何建议。
答案 0 :(得分:3)
对setTimeout()
的调用将使回调排队,但测试将保持同步执行,并在回调有机会执行之前调用done()
和wrapper.unmount()
。
在setTimeout()
回调中调用这些变量:
setTimeout(() => {
expect(wrapper.find('.editField span').at(0).text().trim()).toEqual(jsonDataRooms.data[0].name);
wrapper.unmount();
done();
}, 1000);
测试可能还有其他问题(未提供被测试的代码),但是进行更改会使您更接近。您可能也不需要等待一秒钟,使用0超时就足够了(可能有一个排队的回调只需在expect
之前执行)。