Получение TestCafe для распознавания переменных dotenv - PullRequest
1 голос
/ 03 октября 2019

Возможно, я путаю понятия, но Я бы прочитал, что можно заставить TestCafe распознавать переменные формы process.env.MY_COOL_VARIABLE. Также для моего интерфейса Vue.js (построенного с использованием Vue-CLI, , который использует dotenv под капотом ), я обнаружил, что могу создать файл в .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.

Ответы [ 3 ]

2 голосов
/ 04 октября 2019

TestCafe не предоставляет поддержку .env файлов из коробки. Вы можете создать тестовый файл, для которого потребуется модуль dotenv, и загрузить файл конфигурации:

// enable-dotenv.test.js
require('dotenv').config({ path: '.my.env' });
testcafe chrome enable-dotenv.test.js tests/
1 голос
/ 06 октября 2019

Вот как я решил свою проблему. При отладке я набрал console.log из process.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' });
}
0 голосов
/ 03 октября 2019

Вы пробовали 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 в качестве зависимости, и он работает следующим образом.

...