Подтвердить что ты не робот

Как получить переменную ENV для rspec?

Я использую мастера для запуска моего сервера разработки рельсов. Приятно, что я могу поместить все переменные среды в файл .env. Есть ли способ сделать что-то подобное для моей тестовой среды?

Я хочу установить ключ API, который я буду использовать с камнем vcr, но я не хочу добавлять API в управление версиями. Любые предложения, кроме установки переменной среды вручную, когда я запускаю свои тесты script?

4b9b3361

Ответ 1

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

https://github.com/bkeepers/dotenv

Ответ 2

Если вам просто нужно установить переменные среды, вы можете либо установить их из командной строки:

SOMETHING=123 SOMETHING_ELSE="this is a test" rake spec

Или вы можете определить следующее в верхней части вашего Rakefile или spec_helper.rb:

ENV['SOMETHING']=123
ENV['SOMETHING_ELSE']="this is a test"

Если они не всегда применяются, вы можете использовать условное выражение:

if something_needs_to_happen?
  ENV['SOMETHING']=123
  ENV['SOMETHING_ELSE']="this is a test"
end

Если вы хотите использовать файл Foreman .env, который выглядит так:

SOMETHING=123
SOMETHING_ELSE="this is a test"

и превратите его в следующее и оцените его:

ENV['SOMETHING']='123'
ENV['SOMETHING_ELSE']='this is a test'

Вы можете сделать:

File.open("/path/to/.env", "r").each_line do |line|
  a = line.chomp("\n").split('=',2)
  a[1].gsub!(/^"|"$/, '') if ['\'','"'].include?(a[1][0])
  eval "ENV['#{a[0]}']='#{a[1] || ''}'"
end

хотя я не думаю, что это будет работать для многострочных значений.

И как заметил @JesseWolgamott, похоже, вы могли использовать gem 'dotenv-rails'.

Ответ 3

Один из вариантов заключается в том, чтобы псевдоним команды rspec был немного более конкретным. Поместите следующую строку в свои dotfiles (.bashrc или .profile или что-то еще).

alias 'rspec'='RACK_ENV=test RAILS_ENV=test bundle exec rspec'

Другой вариант - поместить переменные среды в определенные .ENV файлы:

# .env.test

RAILS_ENV=test
MONGODB_URI=mongodb://localhost/test
# .. etc ..

Использование dotenv gem работает или вы можете привести их вручную

$ export $(cat .env.test) && rspec