【问题标题】:Getting TestCafe to recognize dotenv variables让 TestCafe 识别 dotenv 变量
【发布时间】:2020-02-01 21:00:45
【问题描述】:

我可能混淆了概念,但 I'd read that it's possible to get TestCafe to recognize variables 的形式是 process.env.MY_COOL_VARIABLE。同样对于我的 Vue.js 前端(使用 Vue-CLI,which uses dotenv under the hood 构建),我发现我可以在.env.test 中为测试值创建一个文件,如下所示:

VUE_APP_MY_COOL_VARIABLE

然后我会像这样在我的测试代码中访问它:

test('my fixture', async (t) => {
 ...
 await t
      .click(mySelector.find('.div').withText(process.env.VUE_APP_MY_COOL_VARIABLE));
 ...

}

但是,我收到以下错误:

"text" argument is expected to be a string or a regular expression, but it was undefined.

似乎我的环境变量没有被拾取。我像这样构建我的代码:vue-cli-service build --mode test

【问题讨论】:

    标签: automated-tests e2e-testing vue-cli testcafe dotenv


    【解决方案1】:

    您是否尝试过 process.env[VUE_APP_MY_COOL_VARIABLE]?值得注意的是,dotenv 中的所有内容都以字符串形式返回,因此您可能需要自己进行转换。例如:

    function getEnvVariableValue(envVariable: string) {
        // Cast to boolean
        if (envVariableValue.toUpperCase() === "TRUE") {
            return true;
        } else if (envVariableValue.toUpperCase() === "FALSE") {
            return false;
            // Cast to number
        } else if (!isNaN(Number(envVariableValue))) {
            return Number(envVariableValue);
        } else {
            return envVariableValue;
        }
    }
    

    您也可以尝试在根文件夹中创建一个 .env 文件,看看它是否以这种方式选择它。我直接在我的项目中使用 dotenv,将它作为依赖项包含在 package.json 中,它就是这样工作的。

    【讨论】:

    • 我只在我的变量中包含字符串。我尝试将 dotenv 添加到 package.json 中,但似乎没有成功。
    • 这是我的样子:"dependencies": { "@types/dotenv": "^6.1.1", "@types/node": "^11.11.3", "dotenv" : "^8.0.0" } 我已经通过添加到 .env 文件和直接设置环境来测试它。
    • 好的,但我没有使用 .env,我使用的是 .env.test,因为将这些值仅注入我的测试环境很重要。
    • 默认情况下,dotenv 会查找 .env 文件,如果需要更改,则需要直接指定文件:dotenv.config({ path: envFile })
    • 值得注意的是,dotenv 不鼓励使用单独的测试文件的模式:github.com/motdotla/dotenv#should-i-have-multiple-env-files
    【解决方案2】:

    TestCafe 不支持开箱即用的.env 文件。您可以创建一个需要 dotenv 模块的测试文件并加载您的配置文件:

    // enable-dotenv.test.js
    require('dotenv').config({ path: '.my.env' });
    
    testcafe chrome enable-dotenv.test.js tests/
    

    【讨论】:

      【解决方案3】:

      这是我解决问题的方法。调试时,我做了console.logprocess.env 并注意到vue 识别的变量在testcafe 运行期间不可见。来自我们的 package.json:

      "test:ui:run": "VUE_APP_MY_COOL_VARIABLE=ui-test yarn build:test && testcafe -a ../ui-test-server.sh chrome",
      

      此外,这段 javascript 由测试代码和主线代码运行,所以我不得不使用条件。

      import * as dotenv from 'dotenv';
      
      if (process.env.npm_package_scripts_test_ui_run) { // are we running a testcafe script
        dotenv.config({ path: '.env.test' });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 2023-01-15
        • 2017-04-18
        • 1970-01-01
        相关资源
        最近更新 更多