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