Ruby-on-rails spec/rails_helper.rb 与 spec/spec_helper.rb 有何不同?我需要吗?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24145329/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How is spec/rails_helper.rb different from spec/spec_helper.rb? Do I need it?
提问by user3417583
I am doing the Rails Tutorial for the second time. When I enter this
我是第二次做 Rails 教程。当我输入这个
rails generate integration_test static_pages
I get spec/rails_helper.rband spec/spec_helper.rbinstead of just spec/spec_helper.rb
我得到的spec/rails_helper.rb和spec/spec_helper.rb,而不是仅仅spec/spec_helper.rb
Now when I run my tests, they are longer (more "verbose") and slower than when I did this last time.
I am wondering what the difference between the two files is, and if I did something wrong.
Also, is there a way to get rid of the rails_helper.rbfile without messing everything up?
现在,当我运行我的测试时,它们比我上次运行时更长(更“详细”)和更慢。我想知道这两个文件之间的区别是什么,以及我是否做错了什么。另外,有没有办法在rails_helper.rb不弄乱所有内容的情况下摆脱文件?
回答by Dave Schweisguth
rspec-rails 3 generates spec_helper.rband rails_helper.rb. spec_helper.rbis for specs which don't depend on Rails (such as specs for classes in the lib directory). rails_helper.rbis for specs which do depend on Rails (in a Rails project, most or all of them). rails_helper.rbrequires spec_helper.rb. So no, don't get rid of rails_helper.rb; require it (and not spec_helper.rb) in your specs.
rspec-rails 3 生成spec_helper.rb和rails_helper.rb. spec_helper.rb用于不依赖于 Rails 的规范(例如 lib 目录中的类的规范)。rails_helper.rb适用于依赖于 Rails 的规范(在 Rails 项目中,大部分或全部)。rails_helper.rb需要spec_helper.rb. 所以不,不要摆脱rails_helper.rb; spec_helper.rb在您的规范中需要它(而不是)。
If you want your non-Rails-dependent specs to enforce that they're non-Rails-dependent, and to run as fast as possible when you run them by themselves, you could require spec_helper.rbrather than rails_helper.rbin those. But it's very convenient to -r rails_helperin your .rspecrather than requiring one helper or the other in each spec file, so that is sure to be a popular approach.
如果你希望你的非 Rails 依赖规范强制它们是非 Rails 依赖的,并且在你自己运行它们时尽可能快地运行,你可以 requirespec_helper.rb而不是rails_helper.rb那些。但是-r rails_helper在您的.rspec而不是在每个规范文件中需要一个助手或另一个助手非常方便,因此这肯定是一种流行的方法。
If you're using the spring preloader, each class only needs to be loaded once, and spring loads classes eagerly even if you only run a single spec that requires spec_helper, so there isn't as much value in requiring only spec_helperin some files.
如果您使用的是 spring 预加载器,则每个类只需要加载一次,并且即使您只运行一个需要的规范,spring 也会急切地加载类spec_helper,因此仅spec_helper在某些文件中 require 并没有太大的价值。
Source: https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files
来源:https: //www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files
回答by Denis S Dujota
You can always combine all your configs into the spec_helper and only require the spec helper int he rails helper file.
您始终可以将所有配置合并到 spec_helper 中,并且只需要在 rails 帮助文件中使用规范帮助文件。
It is by no means "ideal" since at the end of the day, you are manually doing this "refactor" but IF it really bothers you. just know thats it totally up to you how to structure the Rspec.configure
这绝不是“理想的”,因为归根结底,您是手动执行此“重构”,但如果它真的困扰您。只知道这完全取决于您如何构建Rspec.configure
#rails_helper.rb
require 'spec_helper'
#EMPTY FILE
and just bring in all the rails specific setup in
只需引入所有 Rails 特定设置
# spec_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
# Checks for pending migrations and applies them before tests are run.
# If you are not using ActiveRecord, you can remove these lines.
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
RSpec.configure do |config|
... all our config.whatever_your_heart_desires

