Cannot destructure property publicRuntimeConfig of 'undefined'

Cannot destructure property publicRuntimeConfig of 'undefined'

记录一个在NextJs项目中使用Jest进行单元测试遇到的坑。

在next项目中我们会配置一个next.config.js

//next.config.js
const path = require("path");
module.exports = {
  sassOptions: {
    includePaths: [path.join(__dirname, "styles")]
  },
  async rewrites() {
    return [
      {
        source: "/:path*",
        destination: "/"
      }
    ];
  },
  publicRuntimeConfig: {
    ...
    // some config like this
    NEXT_PUBLICK_TEST: process.env.NEXT_PUBLICK_TEST||"test"
  },
  optimizeFonts: false
};

我们可以通过 next/config 自带的 getConfig() 获取到该配置文件的publicRuntimeConfig对象。
但在进行单元测试的时候会报一个错Cannot destructure property publicRuntimeConfig of 'undefined',意思是通过getConfig获取的publicRuntimeConfig是一个undefined。
此时我们需要在jest.setup.ts中添加如下代码

jest.mock("next/config", () => () => ({
  publicRuntimeConfig: {
    ...
    // some config like this
    NEXT_PUBLICK_TEST: process.env.NEXT_PUBLICK_TEST||"test"
  }
}))

这段代码的意思是对next/config这个module进行mock,使得在运行单元测试时getConfig获取的值不再是undefined

posted @ 2022-09-08 17:07  Jvnjye  阅读(515)  评论(0编辑  收藏  举报