如何在 Jest 单元测试中查看渲染的 React 组件是什么样的?

IT技术 javascript unit-testing reactjs jestjs
2021-05-12 05:41:47

我正在尝试为 React 组件运行测试。我需要检查渲染后的样子。尝试使用,ReactDOMServer.renderToString()但失败。这是代码:

import { NewRec } from '../src/components/edit';
import { shallow } from 'enzyme';
import React from 'react/lib/ReactWithAddons';
import ReactDOMServer from 'react-dom/server';

jest.mock('react-dom');
jest.mock('react/lib/ReactDefaultInjection');

describe('NewRec component', () => {
    const component = shallow(<NewRec />);
    it('returns true if blah blah', ()=>{
        var htmlstring = ReactDOMServer.renderToString(<component />);
    });
});

我收到以下错误:

Invariant Violation: There is no registered component for the tag component

我试着这样称呼它:var htmlstring = ReactDOMServer.renderToString(component);然后我收到这个错误:

Invariant Violation: renderToString(): You must pass a valid ReactElement.

有谁知道问题出在哪里?

2个回答

Jest 中快照功能,它将渲染的树存储为文件。请注意,您还必须安装酶到 json以将酶渲染的组件转换为快照方法可以理解的内容。

import { NewRec } from '../src/components/edit';
import { shallow } from 'enzyme';
import { shallowToJson } from 'enzyme-to-json';

describe('NewRec component', () = > {
  it('returns true if blah blah', () = > {
    const component = shallow(<NewRec />);
    expect(shallowToJson(component)).toMatchSnapshot();
  });
});

这将__snapshot__在您的测试文件夹中的文件夹中创建一个新文件,您可以在其中检查渲染结果。每次重新运行测试时,都会针对快照测试组件。

如果你不使用酶,你也可以使用 Facebook 的react-test-renderer,它更简单:

import React from "react";
import renderer from "react-test-renderer";

test("Test 1", () => {
  const component = renderer.create(
    <TestItem />
  );

  let tree = component.toJSON();
  expect(tree).toMatchSnapshot();
});