Spec / rails_helper.rb khác với spec / spec_helper.rb như thế nào? Tôi có cần nó không?


88

Tôi đang thực hiện Hướng dẫn về Rails lần thứ hai. Khi tôi nhập cái này

rails generate integration_test static_pages

Tôi nhận được spec/rails_helper.rbspec/spec_helper.rbthay vì chỉspec/spec_helper.rb

Bây giờ khi tôi chạy các bài kiểm tra của mình, chúng dài hơn ("dài dòng" hơn) và chậm hơn so với lần tôi làm lần trước. Tôi đang tự hỏi sự khác biệt giữa hai tệp là gì và liệu tôi có làm sai điều gì không. Ngoài ra, có cách nào để loại bỏ rails_helper.rbtệp mà không làm rối tung mọi thứ không?


Đầu ra nào làm sản phẩm thử nghiệm của bạn mà họ không sản xuất trước đây? (Có thể thuộc về một câu hỏi mới.)
Dave Schweisguth

Tôi không chắc về thuật ngữ này, nhưng bây giờ các bài kiểm tra đi qua từng viên ngọc, điều này cho tôi một danh sách dài những thứ tôi không hiểu, và chỉ sau đó kết quả mới xuất hiện. Trước đó, nó chỉ đưa ra kết quả. Tôi sẽ sao chép nó ở đây nhưng nó thực sự dài ...
user3417583

Nó có thể là RSpec 3 không được dùng nữa. Nếu bạn không thể tìm ra chúng khi tìm kiếm hoặc từ myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3 này , hãy đặt chúng vào một câu hỏi mới.
Dave Schweisguth

1
nó cố định, tôi đã phải gỡ bỏ --warnings từ .rspec
user3417583

Câu trả lời:


127

rspec-rails 3 tạo ra spec_helper.rbrails_helper.rb. spec_helper.rblà cho các thông số kỹ thuật không phụ thuộc vào Rails (chẳng hạn như thông số kỹ thuật cho các lớp trong thư mục lib). rails_helper.rbdành cho các thông số kỹ thuật phụ thuộc vào Rails (trong một dự án Rails, hầu hết hoặc tất cả chúng). rails_helper.rbyêu cầu spec_helper.rb. Vì vậy, không, đừng loại bỏ rails_helper.rb; yêu cầu nó (và không spec_helper.rb) trong thông số kỹ thuật của bạn.

Nếu bạn muốn các thông số kỹ thuật không phụ thuộc vào Rails của mình thực thi rằng chúng không phụ thuộc vào Rails và chạy nhanh nhất có thể khi bạn tự chạy chúng, bạn có thể yêu cầu spec_helper.rbthay vì yêu cầu rails_helper.rbchúng. Nhưng nó rất thuận tiện cho -r rails_helperbạn .rspecthay vì yêu cầu một người trợ giúp hoặc người kia trong mỗi tệp thông số kỹ thuật, vì vậy đó chắc chắn là một cách tiếp cận phổ biến.

Nếu bạn đang sử dụng trình tải trước mùa xuân, mỗi lớp chỉ cần được tải một lần và mùa xuân tải các lớp một cách háo hức ngay cả khi bạn chỉ chạy một thông số kỹ thuật duy nhất yêu cầuspec_helper , vì vậy không có nhiều giá trị khi chỉ yêu cầu spec_helpertrong một số tệp.

Nguồn: https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files


4
Điều này rất khó hiểu. Tôi sẽ thêm một PR để cập nhật readme rspec-rails để đánh vần nó như bạn có ở đây. Cảm ơn vì lời giải thích.
steve

4
Đối với những người bắt đầu trên rspec, đó là một mớ hỗn độn!
Eduardo

1

Bạn luôn có thể kết hợp tất cả các cấu hình của mình vào spec_helper và chỉ yêu cầu tệp trợ giúp spec trong tệp trợ giúp.

Nó không có nghĩa là "lý tưởng" vì vào cuối ngày, bạn đang thực hiện việc "tái cấu trúc" này theo cách thủ công nhưng NẾU nó thực sự làm phiền bạn. chỉ cần biết rằng nó hoàn toàn phụ thuộc vào bạn làm thế nào để cấu trúcRspec.configure

#rails_helper.rb

require 'spec_helper'

#EMPTY FILE

và chỉ cần đưa vào tất cả các thiết lập cụ thể của đường ray trong

# 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.