ruby-on-rails 如何为rspec设置ENV变量?

pkmbmrz7  于 2023-08-08  发布在  Ruby
关注(0)|答案(3)|浏览(133)

我正在使用foreman启动rails开发服务器。我可以把所有的环境变量放在.env文件中,这很好。有没有一种方法可以为我的测试环境做类似的事情?
我想设置一个API键,我将用于vcr gem,但我不想将API添加到版本控制中。除了在启动测试脚本时手动设置环境变量之外,还有什么建议吗?

4xrmg8kj

4xrmg8kj1#

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

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

字符串
或者,您可以在Rakefilespec_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'

sulc1iza

sulc1iza2#

你可以使用dotenv gem-它的工作方式和foreman一样,从一个.env文件加载。(以及测试环境的.env.test文件)
https://github.com/bkeepers/dotenv

kmbjn2e3

kmbjn2e33#

一种选择是将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

相关问题