相关文章推荐
严肃的蜡烛  ·  Qt 常用JSON解析示例 - ...·  2 年前    · 
才高八斗的地瓜  ·  Android Fragment + ...·  2 年前    · 

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