【问题标题】:How to send environment variables to Jest CLI?如何将环境变量发送到 Jest CLI?
【发布时间】:2018-10-03 00:19:13
【问题描述】:

我有一个为我运行 Jest 测试的脚本,我想在运行它之前设置一个环境变量,如下所示:

my_test_script.sh

IMPORTANT_ENV_VAR=value_that_matters
./node_modules/.bin/jest --useStderr ./__tests__/my.test.js

但是,当我像这样运行我的测试时,在“my.test.js”中没有设置IMPORTANT_ENV_VAR

如何将环境变量传递到 Jest CLI 中?

【问题讨论】:

    标签: javascript unit-testing continuous-integration jestjs


    【解决方案1】:

    哎呀!
    不是开玩笑的问题,我只需要在 shell 脚本中 export

    export IMPORTANT_ENV_VAR=value_that_matters
    ./node_modules/.bin/jest --useStderr ./__tests__/my.test.js
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 npm,您可以将其添加到您的 package.json 以在测试环境中定义环境变量。

      "jest": {
        "globals": {
          "ENVVAR1": true,
          "ENVVAR2": "value"
        }
      }
      

      【讨论】:

      • 这是设置全局变量,不是环境变量。
      【解决方案3】:

      因为很难在 npm/package.json 下以独立于平台的方式设置环境变量,并且因为 jest --setupFiles 在使用时不在文档中并且似乎不起作用(24.9 ),jest 确实需要一个 --envVar 选项来支持 package.json 外部的环境覆盖(如开发/生产)。

      【讨论】:

        【解决方案4】:

        我为解决问题所做的事情很丑陋,但很有效。

        我正在寻找更好的解决方案(只需通过 cli 设置环境变量),找不到。

        我创建一个设置环境变量的 js 文件,然后加载该文件并将其传递给 setupFile cli 命令。例如

        jest --setupFile=setter.js
        

        setter.js 包含

        process.env.A = "B"
        

        所以,在运行每个测试之前,我可以读取 process.env.A 变量。

        【讨论】:

          【解决方案5】:

          使用cross-env:

          {
            "scripts": {
              "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
            },
            "devDependencies": {
              "cross-env": "7.0.3",
            }
          }
          

          其目的正是以跨平台的方式将环境变量传递给npm脚本。

          【讨论】:

            猜你喜欢
            • 2020-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-26
            • 2021-09-18
            • 2021-09-15
            • 1970-01-01
            相关资源
            最近更新 更多