使用 Jest 测试时未定义全局节点配置变量

Posted

技术标签:

【中文标题】使用 Jest 测试时未定义全局节点配置变量【英文标题】:Global node-config variable undefined when testing with Jest 【发布时间】:2019-11-26 19:45:00 【问题描述】:

我正在实施来自node-config docs 的选项 2。

这运行良好,并且我的全局配置变量是在测试环境之外运行时定义的。

但是,当我使用 vue-cli 和 Jest 单元测试(例如 vue-cli-service test:unit)运行此程序时,我收到此错误:

  ● Test suite failed to run

    ReferenceError: APP_CONFIG is not defined
// vue.config.js
...
 configureWebpack: 
    plugins: [
      new ConfigWebpackPlugin('APP_CONFIG')
    ]
  ,
...

有什么好的方法可以解决这个问题?是不是因为 Jest 在 node-config 可以完成所有全局变量及其值的切换之前开始执行 JS 文件?

【问题讨论】:

【参考方案1】:

Jest 不运行 Webpack,因此您必须手动设置测试配置。作为一种解决方法,您可以将配置声明为 Jest global。

要声明全局,请将globals 属性添加到jest.config.js 中的导出对象。子属性键将是config-webpack 的命名空间(在您的情况下为APP_CONFIG),值将是来自config/ 的所需配置JSON 文件:

// jest.config.js
module.exports = 
  globals: 
    APP_CONFIG: require('./config/default.json')
  

【讨论】:

我尝试在 Jest 配置中设置 globals,但问题是配置应该是动态的(首先从 test.json 获取,然后从 default.json 获取其余部分)。但是,我想我可以提供测试配置的完整副本。但是,我想我最终可能会在这里使用选项 1:github.com/lorenwest/node-config/wiki/Webpack-Usage 我明白了。从技术上讲,您仍然可以轻松地在 jest.config.js 中重新创建动态加载。

以上是关于使用 Jest 测试时未定义全局节点配置变量的主要内容,如果未能解决你的问题,请参考以下文章

安装 jest 时未定义 describe

使用 Jest 在 Nodejs 中测试 Azure 函数 - process.env 变量显示未定义

使用grunt运行jest时未找到任何测试

使用范围变量时未定义 Excel vba 变量

使用 Chrome + XHR 时未定义 PHP POST 变量

尝试从 API 检索数据时未定义经度