如何获取rspec的ENV变量集?

Cyr*_*rus 36 testing rspec ruby-on-rails environment-variables rspec-rails

我正在使用工头来启动我的rails开发服务器.我可以将所有环境变量放在.env文件中,这很好.有没有办法为我的测试环境做类似的事情?

我想设置一个我将与vcrgem 一起使用的API密钥,但我不想将API添加到版本控制中.除了在启动测试脚本时手动设置环境变量之外的任何建议?

Gar*_*ver 35

如果您只需要设置环境变量,可以从命令行设置它们:

SOMETHING=123 SOMETHING_ELSE="this is a test" rake spec
Run Code Online (Sandbox Code Playgroud)

或者您可以在Rakefile或spec_helper.rb的顶部定义以下内容:

ENV['SOMETHING']=123
ENV['SOMETHING_ELSE']="this is a test"
Run Code Online (Sandbox Code Playgroud)

如果它们不总是适用,您可以使用条件:

if something_needs_to_happen?
  ENV['SOMETHING']=123
  ENV['SOMETHING_ELSE']="this is a test"
end
Run Code Online (Sandbox Code Playgroud)

如果要使用Foreman .env文件,如下所示:

SOMETHING=123
SOMETHING_ELSE="this is a test"
Run Code Online (Sandbox Code Playgroud)

并将其转换为以下内容并评估它:

ENV['SOMETHING']='123'
ENV['SOMETHING_ELSE']='this is a test'
Run Code Online (Sandbox Code Playgroud)

你可能会这样做:

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
Run Code Online (Sandbox Code Playgroud)

虽然我认为这不适用于多行值.

正如@JesseWolgamott所说,看起来你可以使用它gem 'dotenv-rails'.


Jes*_*ott 27

您可以使用dotenv gem ---它将与foreman一样工作并从.env文件加载.(以及适用于您的测试环境的.env.test文件)

https://github.com/bkeepers/dotenv

  • 或者,作为替代方案,你可以`RAILS_ENV =测试领班运行捆绑exec rspec spec` (9认同)