开发者问题收集

使用 jest-next-dynamic 测试动态导入

2021-10-23
3286

我正在尝试在 nextjs 版本 10.2.3 中测试动态导入,我尝试使用 jest-next-dynamic 库来避免抛出错误

TypeError: require.resolveWeak

但是当我在 jest 测试用例中调试组件时,我得到以下输出并且无法获取应该加载的真实组件

 <ForwardRef(LoadableComponent) .../>

我的测试用例

it('should render Image component from next/Image', () => {
  await preloadAll();
  defaultProps = getDefaultProps(imgSrcFromAssetsLocation);
  const ContainerImage = shallow(<ContainerImage { ...defaultProps } />);
  console.log(ContainerImage.debug());
  expect(ContainerImage.prop('layout')).toEqual('responsive');
});
2个回答

过了一段时间,我发现我们需要使用 waitFor 或类似方法等待动态元素在测试用例中加载,“jest-next-dynamic”的文档不包括这一点,我从下面的 github repo 中找到了这一点 带有示例的 github repo

Akash Salunkhe
2021-10-29

尽管模块在运行时加载良好,但我在执行 jest 测试时遇到了这个问题。

我有一个自定义包被使用为:

const MyReactComponent = dynamic(import('@mynamespace/myModule/MyReactComponent'))

我的解决方案是修改我的自定义模块导出组件的方式,从:

module.exports = MyReactComponent

到:

exports.MyReactComponent = MyReactComponent;
exports["default"] = MyReactComponent;

因为我使用 rollupJs 来构建,我可以通过简单地导出 const 和默认值来实现这一更改。 从:

const MyReactComponent: React.FC<...> = ...

export default MyReactComponent;

更改为

export const MyReactComponent: React.FC<...> = ...

export default MyReactComponent;

这使我能够运行测试并执行包。 我希望这对某人有帮助 :)

Alexandre Pelagaggi
2023-03-07