ruby-on-rails - 如何获取 rspec 的 ENV 变量集?

标签 ruby-on-rails testing rspec environment-variables rspec-rails

我正在使用 foreman 来启动我的 Rails 开发服务器。很高兴我可以将所有环境变量放在 .env 文件中。有没有办法为我的测试环境做类似的事情?

我想设置一个我将与 vcr gem 一起使用的 API key ,但我不想将 API 添加到版本控制中。除了在我启动测试脚本时手动设置环境变量外,还有什么建议吗?

最佳答案

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

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'

关于ruby-on-rails - 如何获取 rspec 的 ENV 变量集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848553/

相关文章:

ruby-on-rails - 防止保存子对象失败时保存父对象

ruby-on-rails - heroku 上的 Google Vision API 身份验证

testing - calabash-android:是否可以忽略固定(预定义)步骤?

unit-testing - MSTest .ordered 测试文件详细信息

asp.net - 如何让我的 ASP.NET 应用程序在我的自动化 UI 测试期间运行?

ruby-on-rails - 启动 Rails 时定义 "current time"?

mysql - 用于 Restful API 的 Rails 或 node.js

ruby - 如何在 ruby​​ 调试器中运行 rspec Expect 语句?

ruby - 运行单个 RSpec 规范失败,显示 "` require' : cannot load such file"

ruby - 将 `puts` 模拟到 Rspec 中的文件