Jest /酶测试中的setTimeout

时间:2018-08-09 14:11:10

标签: reactjs jestjs enzyme

这是我的代码的大部分:

   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的原因。但这行不通。不知道为什么...

感谢您的任何建议。

1 个答案:

答案 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之前执行)。