71 votes

Quel est le meilleur moyen d'écrire des spécifications pour du code qui dépend de variables d'environnement?

Je teste un code qui tire sa configuration de variables d’environnement (définies par les configurations de configuration Heroku en production, pour le développement local, j’utilise contremaître).

Quel est le meilleur moyen de tester ce type de code avec RSpec?

Je suis venu avec ceci:

 before :each do
    ENV.stub(:[]).with("AWS_ACCESS_KEY_ID").and_return("asdf")
    ENV.stub(:[]).with("AWS_SECRET_ACCESS_KEY").and_return("secret")
end
 

Si vous n'avez pas besoin de tester différentes valeurs des variables d'environnement, vous pouvez les définir en spec_helper .

82voto

iGEL Points 2091

Vous pouvez également stub la constante:

 stub_const('ENV', {'AWS_ACCESS_KEY_ID' => 'asdf'})
 

Ou, si vous voulez toujours le reste de l’ENV:

 stub_const('ENV', ENV.merge('AWS_ACCESS_KEY_ID' => 'asdf'))
 

26voto

nicholaides Points 7859

Ça marcherait.

Une autre solution consiste à mettre une couche d'indirection entre votre code et les variables d'environnement, comme un objet de configuration facile à simuler.

7voto

ciastek Points 835

Comme Heroku le suggère , vous pouvez utiliser le fichier .env Foreman pour stocker les variables d'environnement à des fins de développement.

Si vous faites cela, vous pouvez utiliser foreman run pour exécuter vos spécifications:

 foreman run bundle exec rspec spec
 

4voto

Calvin Points 21

J'éviterais ENV.stub (: []). Cela ne fonctionnera pas si d'autres éléments utilisent ENV, tels que le levier (vous obtiendrez une erreur indiquant que vous devez remplacer DISUBBACK_PRY).

stub_const fonctionne bien comme déjà indiqué.

1voto

Tim Scott Points 7043

Ce que vous voulez, c'est le joyau de Dotenv .

Comme @ciastek le suggère, l'exécution de tests sous Foreman fonctionne très bien pour l'exécution de spécifications à partir de la CLI. Mais cela ne m'aide pas à exécuter les spécifications avec Ruby Test dans Sublime Text 2. Dotenv fait exactement ce que vous voulez, de manière transparente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X