Переменные окружения

Переменные окружения (environment variables) играют важную роль в тестировании, особенно при использовании таких инструментов, как Mocha. Они позволяют настраивать среду выполнения тестов и управлять поведением тестируемого приложения в зависимости от условий. В Mocha переменные окружения используются для конфигурации параметров тестовой среды, таких как базы данных, API, а также для настройки логирования и других аспектов, которые могут изменяться между различными средами разработки, тестирования и продакшн.

Определение переменных окружения

Переменные окружения — это ключ-значение пары, которые могут быть заданы в операционной системе или в конфигурационных файлах. В Node.js, включая Mocha, доступ к этим переменным осуществляется через объект process.env. Этот объект представляет собой набор всех доступных переменных окружения в текущей среде выполнения приложения. Например:

console.log(process.env.NODE_ENV);

Данный код выведет значение переменной NODE_ENV, которая может содержать информацию о текущем режиме приложения (например, development, production, test).

Установка переменных окружения

Переменные окружения можно задавать различными способами, в зависимости от операционной системы и используемых инструментов. В контексте Mocha переменные часто определяются перед запуском тестов для конфигурации тестовой среды.

На Windows

В Windows переменные окружения можно устанавливать в командной строке следующим образом:

set NODE_ENV=test && mocha

Этот способ задает переменную NODE_ENV на значение test перед запуском тестов.

На Linux и macOS

В Unix-подобных системах (Linux и macOS) переменные окружения устанавливаются с использованием команды export:

NODE_ENV=test mocha

Здесь переменная NODE_ENV будет установлена в test, и Mocha запустится с этим значением.

Использование переменных окружения в тестах

Переменные окружения могут быть использованы внутри тестов для динамической настройки среды выполнения. Например, можно использовать переменную NODE_ENV для выбора различных конфигураций базы данных:

describe('Database connection', function() {
  let db;
  
  before(function() {
    if (process.env.NODE_ENV === 'test') {
      db = new Database('test-db-url');
    } else {
      db = new Database('production-db-url');
    }
  });

  it('should connect to the correct database', function() {
    db.connect();
    assert.equal(db.connection.url, process.env.NODE_ENV === 'test' ? 'test-db-url' : 'production-db-url');
  });
});

В этом примере, в зависимости от значения переменной NODE_ENV, будет выбрана соответствующая конфигурация для подключения к базе данных.

Переменные окружения и конфигурация Mocha

Mocha позволяет настроить параметры тестирования через переменные окружения, такие как:

  • MOCHA_BAIL: Если установлено в значение 1, Mocha завершит выполнение тестов при первой же неудаче.
  • MOCHA_TIMEOUT: Устанавливает максимальное время выполнения теста в миллисекундах.

Пример:

MOCHA_TIMEOUT=5000 mocha

Этот код задает тайм-аут для тестов в 5 секунд.

Использование .env файлов

Для удобства работы с переменными окружения часто используется файл .env, который хранит все нужные переменные для проекта. Чтобы читать и использовать переменные из этого файла, можно использовать библиотеку dotenv, которая автоматически загружает переменные окружения из .env в process.env.

Пример файла .env:

NODE_ENV=test
DB_URL=test-db-url

И затем в коде:

require('dotenv').config();

describe('Database connection', function() {
  let db;
  
  before(function() {
    db = new Database(process.env.DB_URL);
  });

  it('should connect to the correct database', function() {
    db.connect();
    assert.equal(db.connection.url, process.env.DB_URL);
  });
});

В данном примере при запуске тестов из файла .env будет прочитана переменная DB_URL, и тест будет использовать ее для настройки подключения к базе данных.

Управление переменными окружения в CI/CD

В процессе настройки непрерывной интеграции и доставки (CI/CD) переменные окружения часто играют ключевую роль. CI/CD системы, такие как Jenkins, GitHub Actions или GitLab CI, позволяют задавать переменные окружения на уровне пайплайна или задачи.

Пример конфигурации переменной окружения в GitHub Actions:

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      NODE_ENV: test
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Run Mocha tests
        run: mocha

В данном примере перед запуском тестов устанавливается переменная окружения NODE_ENV=test, что позволяет использовать соответствующую конфигурацию во время выполнения тестов.

Заключение

Переменные окружения — это мощный инструмент для гибкой настройки тестирования в Mocha. Они позволяют изменять поведение тестов и конфигурации в зависимости от среды, улучшая поддержку разных конфигураций и вариантов выполнения. Использование переменных окружения в сочетании с Mocha способствует созданию более гибких и надежных тестов, упрощая настройку и управление тестовой средой.