【问题标题】:Component not rendering when testing with react-relay使用 react-relay 测试时组件未呈现
【发布时间】:2021-03-31 22:18:30
【问题描述】:

我正在尝试使用 React Relay 和 React 测试库测试组件

// @flow
import { Suspense } from 'react';
import {
  RelayEnvironmentProvider,
  useLazyLoadQuery,
  graphql,
} from 'react-relay/hooks';
import { createMockEnvironment, MockPayloadGenerator } from 'relay-test-utils';
import { render, cleanup, screen, act } from '@testing-library/react';
import Banner from './Banner';
jest.mock('react-router-dom', () => ({
  useLocation: jest.fn(() => ({
    pathname: 'some-path',
  })),
}));
describe('<Banner>', () => {
  let mockEnvironment;
  const defaultMockResolver = {
    // We do not want a consistent return in this case since we want the default MockPayloadGenerator behavior for most fields
    // See https://relay.dev/docs/en/testing-relay-components#mock-resolver-context
    // eslint-disable-next-line consistent-return
    String(context) {
      if (context.name === 'viewer') {
        return {id: 111 };
      }
    },
  };
  beforeEach(() => {
    mockEnvironment = createMockEnvironment();
  });
  afterEach(cleanup);
  it('renders - snapshot', () => {
    mockEnvironment = createMockEnvironment();
    const RelayComponent = () => {
      const data = useLazyLoadQuery(
        graphql`
          query BannerTestQuery @relay_test_operation {
            viewer {
              # Spread the fragment you want to test here
              ...Banner_viewer
            }
          }
        `,
        {},
      );
      return <Banner viewer={data.myData} />;
    };
    render(
      <RelayEnvironmentProvider environment={mockEnvironment}>
        <Suspense fallback="Loading...">
          <RelayComponent />
        </Suspense>
      </RelayEnvironmentProvider>,
    );
    // expect(container.firstChild).toMatchSnapshot();
    act(() => {
      mockEnvironment.mock.resolveMostRecentOperation(operation =>
        MockPayloadGenerator.generate(operation, defaultMockResolver),
      );
    });
    screen.debug();
  });
});

然而,该测试不会使用模拟数据加载组件,而只会返回 Suspense 回退

【问题讨论】:

  • 你找出问题所在了吗?我也面临同样的问题。

标签: javascript reactjs react-testing-library react-relay


【解决方案1】:

这确实有效:https://githubmemory.com/repo/facebook/relay/issues/3276

重要的是,在渲染组件之前调用queueOperationResolver

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 2021-08-19
    • 2015-12-18
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2015-04-04
    • 2020-06-19
    相关资源
    最近更新 更多