gpt4 book ai didi

ruby-on-rails - Rspec - 测试环境的额外配置在哪里?

转载 作者:数据小太阳 更新时间:2023-10-29 08:44:07 26 4
gpt4 key购买 nike

我将默认的 test 用于不同的目的,我决定为运行测试套件进行特定的 rspec 环境配置。

但是,我发现在我的 rails_helper.rb 文件中更改为 ENV["RAILS_ENV"] ||= rspec 后,突然出现了很多错误,未加载常量(FactoryGirl、DatabaseCleaner 等抛出 uninitialized constant 错误)

我的问题是,在测试环境中加载这些人的代码在哪里?由于我计划将此阶段用于运行自动测试以外的其他目的,恐怕这种“无中生有”的添加配置可能无法很好地满足我的计划。

最佳答案

从 Rails 的角度来看,测试环境的配置和加载与任何其他环境(例如 productiondevelopment)一样。您可以在许多 native Rails 命令中看到此前缀 RAILS_ENV=test,例如RAILS_ENV=test rails c 将为测试环境加载 rails 控制台,等等。同样,Rails 中所有特定于测试的配置都在 config/environments 文件夹中的 test.rb 中定义。

但是,当您使用 rspec spec 运行您的规范时,您实际上是在启动 RSpec 运行器,对于大多数意图和目的而言,它独立于 Rails 运行(即使使用 rspec-rails gem)。

按照惯例,当 RSpec 启动时,它所做的第一件事是从当前目录中的 .rspec 中读取命令行参数(如果存在)。然后它运行 spec_helper.rb(对于 rspec-rails 3+ 也运行 rails_helper.rb)。它实际上是 spec_helper.rb 为您的测试加载 Rails 环境的所有繁重工作,以及您在测试中使用的任何模块,例如 DatabaseCleanerFactoryGirl

如果您想知道 RSpec 是如何连接到 Rails 中的,大部分是在引导 Rails 的这一行中执行的。

require File.expand_path('../../config/environment', __FILE__)

现在,关于你的问题,如果没有 ENV['RAILS_ENV'] ||= 'test' 语句,上面的行将在默认环境(开发)中加载 Rails,这不是'这不是你想要的,因为任何不在 :test 组中的 gem 都不会被加载,并且 environments/test.rb 也不会被加载。

长话短说

测试配置由两个文件处理:spec/spec_helper.rb(有时命名为rails_helper.rb)和config/environments/test.rb。前者配置 RSpec 以及将在 spec 中使用的文件中专门使用的任何对象和模块,后者配置您的 Rails 应用程序本身。省略 ENV['RAILS_ENV'] ||= test 会加载开发环境和 gemset,而不是测试环境和 gemset,这就是为什么会出现大量错误的原因。

关于ruby-on-rails - Rspec - 测试环境的额外配置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36704483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com