22

Foreman'ı raylarım geliştirme sunucumuzu başlatmak için kullanıyorum. Tüm ortam değişkenlerimi .env dosyasına koyabildiğim için güzel. Test ortamım için benzer bir şey yapmanın bir yolu var mı?rspec için bir ENV değişken kümesi nasıl alabilirim?

vcr gemiyle kullanacağım bir API anahtarı ayarlamak istiyorum, ancak API'yi sürüm denetimine eklemek istemiyorum. Test komutumu başlattığımda ortam değişkenini manuel olarak ayarlamanın yanı sıra herhangi bir öneriniz var mı?

cevap

23

Dotenv gem'i kullanabilirsiniz --- usen ile aynı şekilde çalışır ve bir .env dosyasından yüklenir.

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

Yoksa: sadece ortam değişkenleri ayarlamanız gerekiyorsa (ve test ortamları için bir .env.test dosyası)

https://github.com/bkeepers/dotenv

+7

onları getirebilir veya:

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

Diğer bir seçenek, belirli .env dosyalarındaki ortam değişkenleri koymaktır , 'RAILS_ENV = test ustabaşı çalıştır exec rspec spec' –

+0

'u test edebilirim. Tam olarak aradığım şey buydu. Teşekkürler –

26

, komut satırından ayarlayabilirsiniz ya senin Rakefile veya spec_helper.rb üst kısmında aşağıdaki tanımlayabiliriz: onlar her zaman geçerli değilse

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

, bir koşullu kullanabilirsiniz:

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

sen gibi görünen bir Foreman .env dosyasını kullanmak istiyorsanız:

SOMETHING=123 
SOMETHING_ELSE="this is a test" 

ve aşağıdaki çevirmek ve onu eval:

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

Sen yapabilir:

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 

Çok satırlı değerler için çalışacağını düşünün.

Ve @JesseWolgamott'un belirttiği gibi, gem 'dotenv-rails''u kullanabilirsiniz.

+0

Bu cevap özellikle daha iyidir, çünkü Sinatra gibi minimalist çerçeveleri kullanırken özel olarak herhangi bir 'gem'e güvenmeyecek yaklaşımlar sunar. Teşekkürler! – fagiani

1

Bir seçenek, rspec komutunun biraz daha spesifik olması için takma addır. Aşağıdaki satırı dotfile'larınıza yerleştirin (.bashrc veya .profile veya bir şey). alternatif olarak, dotenv mücevher kullanma

# .env.test 

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

çalışır veya el

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