我有一个自定义的
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 | });
测试自定义文档的推荐方法是什么,或者如何解决这个问题?谢谢你。
我也遇到了这个错误 - 最终模拟了 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' });
}
}))
}));