Jest,React 测试 - 组件定义缺少显示名称

Jest, React test - Component definition is missing display name

我收到错误:组件定义在我的反应 jest 测试 中缺少显示名称。我发现了不同的问题和答案,但是 none 这个答案对我的测试很有用。有人遇到过同样的错误并且知道如何解决吗? 这是我的代码:

const mockPdfCountriesTable = jest.fn();
jest.mock(
  '@components/admin/PdfReport/PdfCountriesPage/PdfCountriesPageTable',
  () => (props) => {
    mockPdfCountriesTable(props);
    return <mockPdfCountriesTable />;
  }
);

describe('PdfReport', () => {
  let wrapper;
  let sortedCountries;
  let attendeeCountries;
  beforeEach(() => {
    const scaleLinear = jest.fn();
    const geoMercator = jest.fn();
    const getSupportedLanguage = jest.fn();
    scaleLinear();
    geoMercator();
    getSupportedLanguage();
    attendeeCountries = {
      US: {
        value: 3324,
        alpha3: 'USA',
      },
      RU: {
        value: 90,
        alpha3: 'RUS',
      },
      CN: {
        value: 675,
        alpha3: 'CHN',
      },
    };
    sortedCountries = [
      {
        value: 3324,
        alpha3: 'USA',
      },
      {
        value: 675,
        alpha3: 'CHN',
      },
      {
        value: 90,
        alpha3: 'RUS',
      },
    ],
    wrapper = mount(
      <PdfCountriesPage attendeeCountries={attendeeCountries} />
    );
  });
  it('Renders <PdfCountriesPageTable/> child component props', () => {
    expect(mockPdfCountriesTable).toHaveBeenCalledWith(
      expect.objectContaining({
        sortedCountriesArray: sortedCountries,
      })
    );
  });
});

谢谢!

displayName 属性 用于为 React devtools 扩展提供描述性名称,因为您是 运行 测试,所以不需要这样做。因此,消除错误的最简单方法是标记此函数,以便 eslint 忽略缺少的 displayName。为此,您可以直接在 jest.fn() 行上方添加以下注释:

// eslint-disable-next-line react/display-name

因此,对于您的测试,您可以将其更改为:

const mockPdfCountriesTable = jest.fn();
// eslint-disable-next-line react/display-name
jest.mock(
  '@components/admin/PdfReport/PdfCountriesPage/PdfCountriesPageTable',
  () => (props) => {
    mockPdfCountriesTable(props);
    return <mockPdfCountriesTable />;
  }
);

还有其他解决方法,但为了测试简单起见,我将其注释掉。如果您想了解更多详细信息,请查看此 post,这就是我遇到此解决方案的方式: https://bobbyhadz.com/blog/react-component-is-missing-display-name

HTH