本文介绍了`react-apollo``MockedProvider`是否需要超时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将 jest 与react-apollo的 MockedProvider 结合使用,但由于 MockedProvider 似乎是异步运行,因此遇到了麻烦.

I'm using jest with react-apollo's MockedProvider and I'm having trouble because the MockedProvider seems to be behaving asynchronously.

给出以下简单组件:

const Component =()=>< Query query = {query}>((({loading,data})=> if(loading)返回'loading'else if(data)返回'data'else else'nothing'</Query>

此测试:

it('', done => {
    const renderer = TestRenderer.create(
      <MockedProvider mocks={myMock} >
        <Component/>
      </MockedProvider>
    )

  expect(renderer.toJSON()).toMatchSnapshot()

显示以下快照:正在加载

但是如果我添加一个1毫秒的简单超时:

but if I add a simple timeout of 1 ms:

  it('', done => {
    const renderer = TestRenderer.create(
      <MockedProvider mocks={myMock} >
        <Component/>
      </MockedProvider>
    )

    setTimeout(() => {
      expect(renderer.toJSON()).toMatchSnapshot()
      done()
    }, 1);

我得到以下快照: data

有没有更优雅的方法来解决这个问题?

Is there a more elegant way to get around this?

推荐答案

您可以使用waait lib,如以下文档

You can use waait lib like shown at this docs

it('',async () => {
    const renderer = TestRenderer.create(
      <MockedProvider mocks={myMock} >
        <Component/>
      </MockedProvider>
    )
    await wait(0);
    expect(renderer.toJSON()).toMatchSnapshot();

这篇关于`react-apollo``MockedProvider`是否需要超时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-14 12:03