Automated tests 让TestCafe识别dotenv变量

Automated tests 让TestCafe识别dotenv变量,automated-tests,e2e-testing,vue-cli,testcafe,dotenv,Automated Tests,E2e Testing,Vue Cli,Testcafe,Dotenv,我可能混淆了概念,但形式是process.env.MY_COOL_变量。另外,对于使用Vue CLI构建的Vue.js前端,我发现我可以在.env.test中创建一个文件,用于测试值,如下所示: VUE_APP_MY_COOL_VARIABLE 然后我会在测试代码中访问它,如下所示: test('my fixture', async (t) => { ... await t .click(mySelector.find('.div').withText(process.e

我可能混淆了概念,但形式是process.env.MY_COOL_变量。另外,对于使用Vue CLI构建的Vue.js前端,我发现我可以在.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服务构建模式测试。

您是否尝试过process.env[vue\u APP\u my\u COOL\u 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中直接在项目中使用它,它是这样工作的。

您尝试过process.env[VUE\u APP\u my\u COOL\u 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中直接在项目中使用它,它是这样工作的。

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

//enable-dotenv.test.js 需要'dotenv'.config{path:'.my.env'};
TestCafe不支持现成的.env文件。您可以创建需要dotenv模块的测试文件并加载配置文件:

//enable-dotenv.test.js 需要'dotenv'.config{path:'.my.env'};
以下是我解决问题的方法。调试时,我执行了process.env的console.log,并注意到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' });
}

以下是我解决问题的方法。调试时,我执行了process.env的console.log,并注意到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' });
}

我只在变量中包含字符串。我曾尝试将dotenv添加到package.json,但似乎没有成功。以下是我的情况:依赖项:{@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不鼓励使用单独的测试文件模式:我只在变量中包含字符串。我曾尝试将dotenv添加到package.json,但似乎没有成功。以下是我的情况:依赖项:{@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不鼓励使用单独测试文件的模式,尽管: