spec / rail_helper.rb ต่างจาก spec / spec_helper.rb อย่างไร? ฉันต้องการหรือไม่


90

ฉันกำลังทำ Rails Tutorial เป็นครั้งที่สอง เมื่อใส่เข้าไปแล้ว

rails generate integration_test static_pages

ฉันได้รับspec/rails_helper.rbและspec/spec_helper.rbแทนที่จะเป็นเพียงspec/spec_helper.rb

ตอนนี้เมื่อฉันทำการทดสอบพวกมันจะยาวกว่า ("verbose" มากขึ้น) และช้ากว่าครั้งที่แล้ว ฉันสงสัยว่าความแตกต่างระหว่างสองไฟล์คืออะไรและฉันทำอะไรผิดพลาด นอกจากนี้ยังมีวิธีกำจัดrails_helper.rbไฟล์โดยไม่ทำให้ทุกอย่างยุ่งเหยิง?


ผลลัพธ์ใดที่คุณทดสอบผลิตภัณฑ์ที่ไม่เคยผลิตมาก่อน (อาจอยู่ในคำถามใหม่)
Dave Schweisguth

ฉันไม่แน่ใจเกี่ยวกับคำศัพท์ แต่ตอนนี้การทดสอบผ่านอัญมณีแต่ละชิ้นซึ่งทำให้ฉันมีรายการสิ่งที่ฉันไม่เข้าใจมากมายจากนั้นผลลัพธ์ก็ปรากฏ ก่อนหน้านี้มันเพิ่งให้ผลลัพธ์ ฉันจะคัดลอกที่นี่ แต่มันนานมาก ...
user3417583

อาจเป็นการเลิกใช้ RSpec 3 หากคุณไม่สามารถเข้าใจได้จากการค้นหาหรือจากmyronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3นี้ให้ตั้งคำถามใหม่
Dave Schweisguth

1
ได้รับการแก้ไขแล้วฉันต้องลบ - คำเตือนจาก. rspec
user3417583

คำตอบ:


130

rspec-rail 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) ในข้อกำหนดของคุณ

หากคุณต้องการให้ข้อมูลจำเพาะที่ไม่ขึ้นกับ Rails ของคุณบังคับใช้ว่าพวกเขาไม่ขึ้นกับ Rails และเพื่อให้ทำงานได้เร็วที่สุดเมื่อคุณเรียกใช้ด้วยตัวเองคุณอาจต้องการspec_helper.rbมากกว่าrails_helper.rbในสิ่งเหล่านั้น แต่สะดวก-r rails_helperในการใช้งานของคุณ.rspecแทนที่จะต้องใช้ผู้ช่วยหนึ่งคนหรืออีกคนในไฟล์ข้อมูลจำเพาะแต่ละไฟล์ดังนั้นจึงเป็นแนวทางที่ได้รับความนิยม

หากคุณใช้สปริงโหลดล่วงหน้าแต่ละคลาสจะต้องโหลดเพียงครั้งเดียวและสปริงโหลดคลาสอย่างกระตือรือร้นแม้ว่าคุณจะเรียกใช้ข้อมูลจำเพาะเดียวที่ต้องการspec_helperดังนั้นจึงไม่มีค่ามากเท่าที่ต้องการspec_helperในบางไฟล์เท่านั้น

ที่มา: https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files


4
นี่สับสนมาก ฉันจะเพิ่ม PR เพื่ออัปเดต rspec-rail readme เพื่อสะกดคำตามที่คุณมีที่นี่ ขอบคุณสำหรับคำอธิบาย
สตีฟ

4
สำหรับคนที่เริ่มต้น rspec ว่ายุ่งมาก!
Eduardo

1

คุณสามารถรวมการกำหนดค่าทั้งหมดของคุณลงใน spec_helper ได้ตลอดเวลาและต้องการเฉพาะไฟล์ spec helper int he rail helper เท่านั้น

มันไม่ได้เป็น "อุดมคติ" เนื่องจากในตอนท้ายของวันคุณกำลังทำ "refactor" นี้ด้วยตนเอง แต่ถ้ามันรบกวนคุณจริงๆ เพียงแค่รู้ว่าทั้งหมดนี้ขึ้นอยู่กับคุณว่าจะจัดโครงสร้างไฟล์Rspec.configure

#rails_helper.rb

require 'spec_helper'

#EMPTY FILE

และนำการตั้งค่าเฉพาะรางทั้งหมดเข้ามา

# 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.