【问题标题】:Global beforeEach and afterEach Jest in ReactReact 中的全局 beforeEach 和 afterEach Jest
【发布时间】:2021-09-18 17:04:43
【问题描述】:

我正在使用 react,所以在每次测试之前我需要创建一个容器元素。目前,我有这样的事情:

import { screen } from '@testing-library/react';
import { render, unmountComponentAtNode } from 'react-dom';
import Form from './Form';

let container: Element | null = null;

// setup a DOM element as a render target
beforeEach(() => {
  container = document.createElement('div');
  document.body.appendChild(container);
});

// cleanup on exiting
afterEach(() => {
  unmountComponentAtNode(container!);
  container?.remove();
  container = null;
})

test('renders with a heading', () => {
  render(
    <Form heading={'Form Heading'} />, container
  );

  const element = screen.getByText(/form heading/i);

  expect(element).toBeInTheDocument();
});

如您所料,我需要为每个测试文件设置beforeEachafterEach。可以将其设为全局(全局后,我们仍需要访问container 变量)?期待您的回复!

【问题讨论】:

标签: javascript reactjs jestjs


【解决方案1】:

虽然从技术上讲,这不是您所提问题的答案,但这是您遇到的根本问题的解决方案。

你输入了错误的render

import { render, unmountComponentAtNode } from 'react-dom';

react-dom 导入的render 函数用于将结果实际呈现给浏览器,而不是用于测试。

您需要:import {render} from '@testing-library/react'。测试库为您完成所有容器管理。

如果你真的需要容器来做任何事情,你仍然可以这样做:

const {container} = render(/* ... */);

但大多数时候这是不必要的。

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2013-06-23
    相关资源
    最近更新 更多