如何为 rspec 设置 ENV 变量?
Posted
技术标签:
【中文标题】如何为 rspec 设置 ENV 变量?【英文标题】:How do I get an ENV variable set for rspec? 【发布时间】:2013-05-26 18:13:48 【问题描述】:我正在使用工头来启动我的 Rails 开发服务器。很高兴我可以将我所有的环境变量放在.env
文件中。有没有办法为我的测试环境做类似的事情?
我想设置一个将与vcr
gem 一起使用的 API 密钥,但我不想将该 API 添加到版本控制中。除了在我启动测试脚本时手动设置环境变量之外还有什么建议吗?
【问题讨论】:
【参考方案1】:如果你只需要设置环境变量,你可以从命令行设置它们:
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
如果你想使用 Foreman .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'
。
【讨论】:
这个答案特别好,因为它提供了不依赖任何特定gem
的方法,特别是在使用像Sinatra
这样的简约框架时。谢谢!【参考方案2】:
您可以使用 dotenv gem --- 它的工作原理与 foreman 相同,并从 .env 文件加载。 (以及用于您的测试环境的 .env.test 文件)
https://github.com/bkeepers/dotenv
【讨论】:
或者,您也可以RAILS_ENV=test foreman run bundle exec rspec spec
这正是我想要的。谢谢【参考方案3】:
一种选择是将 rspec 命令的别名更具体一点。将以下行放入您的点文件中(.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
【讨论】:
以上是关于如何为 rspec 设置 ENV 变量?的主要内容,如果未能解决你的问题,请参考以下文章
.env 未使用 rspec 在 Rails 的测试环境中加载