React Apollo MockProvider始终加载,从不提供数据

Dav*_*d M 3 mocking reactjs graphql enzyme react-apollo

我正在尝试测试使用graphql的组件,但是当使用Apollo的MockProvider时,我始终无法获取数据,它每次都说loading = true。

一个完整的,极简的示例在这里

我尝试过的事情:

  1. 在网上寻找(发现了类似的问题,但由于没有答案,我想我会用更多的信息来制作一个新的问题)
  2. 在测试(export function Component)时尝试导出没有graphql的组件,但是在测试嵌套组件时不起作用
  3. 尝试尽可能简化(其结果在示例中)

小智 8

是的,我也遇到了这个问题。有趣的是,如果我将控制台日志添加到组件本身,则可以看到数据最终到达那里。但是由于某种原因,该wrapper界面仍只包含我们的“加载中...” UI。

原来,您需要致电wrapper.update()以获取包装器以重新呈现其内容。

这是对我有用的方法,但似乎不理想,因此,如果其他人有解决方法,请告诉我!现在,我们的测试如下所示:

it('should render the HeroDiv if there is guide data', async () => {
  const wrapper = mount(
    <MockedProvider mocks={mocksWithGuideData} addTypename={false}>
      <Hero {...props} />
    </MockedProvider>
  );

  await wait(0);
  wrapper.update();

  expect(wrapper.find('HeroDiv').exists()).toBeTruthy();
})
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,我已经被这个问题困扰好几天了......非常感谢 (2认同)