.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.rbrails_helper.rb

require "dotenv"
Dotenv.overload ".env.test" 
Dotenv.overload ".env.test.local"

【讨论】:

以上是关于.env 未使用 rspec 在 Rails 的测试环境中加载的主要内容,如果未能解决你的问题,请参考以下文章

使用 rspec 的 Sonarqube 未显示单元测试的计数

RAILS_ENV=生产轨道资产:预编译不适用于 RSpec

Rails Fixtures 未使用 rspec 加载

在 Rails 中使用 RSpec 和 Capybara 时未定义的方法“访问”

未使用 Rails 测试环境中的预编译资产

如何为 rspec 设置 ENV 变量?