本文介绍了`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 组件 = () =><Query query={query}>(({loading, data }) => if(loading) return ‘loading’ else if (data) return ‘data’ else return ‘nothing’</Query>

本次测试:

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

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

显示一个快照:loading

但是如果我添加一个简单的 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