.env 未使用 rspec 在 Rails 的测试环境中加载
Posted
技术标签:
【中文标题】.env 未使用 rspec 在 Rails 的测试环境中加载【英文标题】:.env not being loaded in test environment in Rails with rspec 【发布时间】:2015-07-01 15:03:39 【问题描述】:我正在使用gem 'dotenv-rails', '~> 0.9.0'
将环境变量加载到 Rails 4.0.5 应用程序中。我有一个 .env 文件和一个 .env.test。一切都在开发中运行良好,但是当涉及到我使用 rspec 进行的测试时,它无法设置环境变量。
我已经在测试环境中进入 Rails 控制台,我可以看到它们被设置为 nil。
关于如何让 dotenv 在测试中加载的任何提示?
【问题讨论】:
【参考方案1】:将此行放在 rspec 设置中的 Dotenv::Railtie.load
或您要加载 dot env 文件的任何页面中。
【讨论】:
尝试将其添加到 spec_helper.rb 中,我收到此错误 `load': wrong number of arguments (0 for 1..2) (ArgumentError) 哦,无论如何,很高兴看到你解决了这个问题。 如果没有你的帮助,paritosh-piplewar 会为你的帮助欢呼。【参考方案2】:Dotenv.load(File.expand_path("../../.env.#Rails.env", __FILE__))
在研究 Paritosh 的回答后,我发现需要根据环境指定文件。
【讨论】:
【参考方案3】:这是一个较晚的答案,但对于任何可能觉得它有帮助的人,请将其添加到 spec_helper.rb
require 'dotenv'
Dotenv.load('.env')
此外,Dotenv.load 可以接受一个列表,例如:
Dotenv.load(
'.env.local',
'.env.test',
'.env'
)
【讨论】:
需要注意的关键点:变体(即.env.test
)必须在基础.env
之前。
谢谢!我是测试新手,我正要开始翻转表格。【参考方案4】:
如果您有测试特定环境配置,您可以使用Dotenv.overload
覆盖其他环境配置。只需将以下内容添加到您的 spec_helper.rb
或 rails_helper.rb
。
require "dotenv"
Dotenv.overload ".env.test"
Dotenv.overload ".env.test.local"
【讨论】:
以上是关于.env 未使用 rspec 在 Rails 的测试环境中加载的主要内容,如果未能解决你的问题,请参考以下文章
使用 rspec 的 Sonarqube 未显示单元测试的计数
RAILS_ENV=生产轨道资产:预编译不适用于 RSpec