Использование файлов .env для модульного тестирования с помощью jest - PullRequest
0 голосов
/ 09 мая 2018

Можно ли загрузить переменные окружения из файла env для целей модульного тестирования в Jest?Я собираюсь запустить серию тестов, например, так:

// unit tests for env file
describe('env', () => {
    it('should have a client id', () => {
        expect(process.env.CLIENT_ID).toBeDefined();
    });
    it('should have a client secret', () => {
        expect(process.env.CLIENT_SECRET).toBeDefined();
    });
    it('should have a host', () => {
        expect(process.env.HOST).toBeDefined();
    });
    it('should have a scope', () => {
        expect(process.env.SCOPE).toBeDefined();
    });
    it('should have a response type', () => {
        expect(process.env.RESPONSE_TYPE).toBeDefined();
    });
    it('should have a redirect uri', () => {
        expect(process.env.REDIRECT_URI).toBeDefined();
    });
});

В настоящее время все вышеперечисленные тесты не пройдут, заявив, что переменные не определены.Первоначально я использовал настройку mocha / chai, которая позволяла мне загружать все переменные env с помощью dotenv.Это включало запуск всех модульных тестов через веб-пакет и работало нормально.

Однако, прочитав документацию Jest не запускает тесты через веб-пакет;вместо этого модули извлекаются через moduleNameMapper.Это отлично работает для всего остального, но я не могу загрузить переменные файла env.До сих пор я пытался использовать опцию setupFiles для js-файла, который вызывает dotenv.config с указанным ему путем к файлу env:

// setup file for jest
const dotenv = require('dotenv');
dotenv.config({ path: './env' });

Это не сработало, поэтому я 'Теперь мы прибегли к использованию только файла .env.js для модульных тестов и вместо этого передали этот файл в опцию setupFiles.Тем не менее, для удобства обслуживания и для того, чтобы он работал с веб-пакетом для производства, я бы хотел сохранить все это в одном файле.Вот выдержка из того, как файл .env.js выглядит для справки

// .env.js extract example
process.env.PORT = 3000;
process.env.HOST = 'localhost';
process.env.CLIENT_ID = 'your client id';
process.env.REDIRECT_URI = 'your callback endpoint';

Ответы [ 5 ]

0 голосов
/ 06 июля 2019

Я немного опоздал, но надеюсь, что это поможет тем, кто ищет работу дотенв. Это просто расширенная версия того, что сказал @DavidDehghan. Поэтому добавьте установочный файл, который будет запущен до любой шутливой конфигурации, как сказал Дэвид

Теперь, убедившись, что загрузка платформы для разрешения относительного пути загружена, используйте модуль path для разрешения папки

.
import * as  dotenv from 'dotenv';
import * as path from 'path';

dotenv.config({ path: path.resolve(__dirname + './../config/testFolder/.env') });

Теперь в вашем spec-файле вы можете проверить, содержит ли переменная process.env значения, загруженные из файла .env в testFolder

describe('Test suite - testing app service', () => {
  beforeAll(() => {
    console.log('coming inside beforeAll', process.env.LCp);

  });
});
0 голосов
/ 08 марта 2019

Вы можете загрузить файлы env для всех ваших тестов, как это. Файл установки будет выполняться один раз для каждого загруженного тестового файла.

jest.config.js : 

module.exports = {
 ....
    setupFiles: ["<rootDir>/test/setup-tests.ts"]
}


test/test-setup.ts:

import dotenv from 'dotenv';
dotenv.config({path: './config.env.test'});
0 голосов
/ 10 мая 2018

Ваш верхний путь конфигурации с использованием ./ является относительным с точки внедрения, вероятно, ваш набор тестов может находиться в папке с именем test, что приводит к тому, что он не будет найден при запуске ваших модульных тестов. dotenv.config(); Использует глобальную стратегию внедрения, которая похожа на абсолютный путь.

0 голосов
/ 21 января 2019

У меня ничего из этого не получилось, но я нашел отличную статью о настройке dotenv по умолчанию в Jest в package.json:

{
  "scripts": {
    "test": "jest --setupFiles dotenv/config"
  }
}
0 голосов
/ 10 мая 2018

Так что проблема требует изменения этого:

dotenv.config({ path: './env' });

до:

dotenv.config();

Почему он не поднял его, я понятия не имею, но просто оставить настройки по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...