如何在 Next.js 中测试自定义 `Document`?

问题描述 投票:0回答:1

我有一个自定义的

Document
,它是从文档复制的:

import Document, { Html, Head, Main, NextScript } from 'next/document'

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx)
    return { ...initialProps }
  }

  render() {
    return (
      <Html lang="en">
        <Head />
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    )
  }
}

export default MyDocument

我尝试用以下内容为其编写测试:

import { render } from '@testing-library/react';
import MyDocument from '../_document.page';

describe('<MyDocument />', () => {
  it('should render without errors', async () => {
    const documentProps = {} as any;

    render(<MyDocument {...documentProps} />);
  });
});

但是我收到错误:

    TypeError: Cannot destructure property 'inAmpMode' of '(0 , _react).useContext(...)' as it is null.

       6 |     const documentProps = {} as any;
       7 |
    >  8 |     render(<MyDocument {...documentProps} />);
         |     ^
       9 |   });
      10 | });

测试自定义文档的推荐方法是什么,或者如何解决这个问题?谢谢你。

javascript reactjs jestjs next.js react-testing-library
1个回答
0
投票

我也遇到了这个错误 - 最终模拟了 next/document,并返回了 Html 的模拟实现。

jest.mock('next/document', () => ({
  __esModule: true,
  ...jest.requireActual('next/document'),
  Html: jest.fn().mockImplementation(() => ({
    render() {
      return React.createElement('html', { 'data-testid': 'html' });
    }
  }))
}));
© www.soinside.com 2019 - 2024. All rights reserved.