web-dev-qa-db-ja.com

rspecのENV変数セットを取得するにはどうすればよいですか?

私はフォアマンを使用して私のRails開発サーバーを起動しています。すべての環境変数を.envファイル。テスト環境で同様のことを行う方法はありますか?

vcr gemで使用するAPIキーを設定したいのですが、バージョン管理にAPIを追加したくありません。テストスクリプトを起動するときに環境変数を手動で設定する以外の提案はありますか?

37
Cyrus

Dotenv gemを使用できます--- foremanと同じように機能し、.envファイルからロードします。 (およびテスト環境用の.env.testファイル)

https://github.com/bkeepers/dotenv

27
Jesse Wolgamott

環境変数を設定する必要があるだけの場合は、コマンドラインから設定することもできます。

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

フォアマンを使用したい場合.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'

35
Gary S. Weaver

1つのオプションは、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
1
AJcodez