web-dev-qa-db-fra.com

Comment obtenir un ensemble de variables ENV pour rspec?

J'utilise contremaître pour démarrer mon Rails. C'est bien que je puisse mettre toutes mes variables d'environnement dans le .env fichier. Existe-t-il un moyen de faire quelque chose de similaire pour mon environnement de test?

Je veux définir une clé API que j'utiliserai avec la gemme vcr, mais je ne veux pas ajouter l'API au contrôle de version. Avez-vous des suggestions en plus de définir la variable d'environnement manuellement lorsque je démarre mon script de tests?

37
Cyrus

Vous pouvez utiliser le gem dotenv --- il fonctionnera de la même manière que le contremaître et se chargera à partir d'un fichier .env. (et un fichier .env.test pour vos environnements de test)

https://github.com/bkeepers/dotenv

27
Jesse Wolgamott

Si vous avez juste besoin de définir des variables d'environnement, vous pouvez les définir à partir de la ligne de commande:

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

Ou vous pouvez définir ce qui suit en haut de votre Rakefile ou spec_helper.rb:

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

S'ils ne s'appliquent pas toujours, vous pouvez utiliser un conditionnel:

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

Si vous souhaitez utiliser un contremaître .env fichier, qui ressemble à:

SOMETHING=123
SOMETHING_ELSE="this is a test"

et le transformer en ce qui suit et l'évaluer:

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

Vous pourriez faire:

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

bien que je ne pense pas que cela fonctionnerait pour les valeurs multilignes.

Et comme @JesseWolgamott l'a noté, il semble que vous pourriez utiliser gem 'dotenv-Rails'.

35
Gary S. Weaver

Une option consiste à alias la commande rspec pour être un peu plus spécifique. Mettez la ligne suivante dans vos fichiers dot (.bashrc ou .profile ou quelque chose).

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

Une autre option consiste à placer des variables d'environnement dans des fichiers .env spécifiques:

# .env.test

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

Utiliser la gemme dotenv fonctionne ou vous pouvez les introduire manuellement

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