ฉันคิดว่ามีวิธีการทดสอบเฉพาะกับป้ายกำกับที่กำหนด มีใครรู้บ้าง
ฉันคิดว่ามีวิธีการทดสอบเฉพาะกับป้ายกำกับที่กำหนด มีใครรู้บ้าง
คำตอบ:
การค้นหาเอกสารไม่ใช่เรื่องง่าย แต่คุณสามารถติดแท็กตัวอย่างด้วยแฮช เช่น.
# spec/my_spec.rb
describe SomeContext do
it "won't run this" do
raise "never reached"
end
it "will run this", :focus => true do
1.should == 1
end
end
$ rspec --tag focus spec/my_spec.rb
ข้อมูลเพิ่มเติมเกี่ยวกับGitHub (ทุกคนที่มีลิงก์ที่ดีกว่าโปรดแนะนำ)
(update)
RSpec อยู่ในขณะนี้เอกสารที่ยอดเยี่ยมที่นี่ ดูส่วนตัวเลือก - แท็กสำหรับรายละเอียด
ตั้งแต่ v2.6 แท็กประเภทนี้สามารถแสดงออกได้ง่ายยิ่งขึ้นโดยรวมถึงตัวเลือกการกำหนดค่าtreat_symbols_as_metadata_keys_with_true_values
ซึ่งช่วยให้คุณทำ:
describe "Awesome feature", :awesome do
ที่ได้รับการปฏิบัติราวกับว่ามันเป็น:awesome
:awesome => true
ดูคำตอบนี้สำหรับวิธีกำหนดค่า RSpec ให้เรียกใช้การทดสอบแบบ 'โฟกัส' โดยอัตโนมัติ นี้ทำงานได้ดีโดยเฉพาะกับยาม
:focus
ซึ่งป้องกันมิให้ไม่พึงประสงค์เช่น 'binding.pry ,
console.log` ฯลฯ จากการคืบคลานเข้าสู่ codebase
rspec
โปรแกรม :) เพราะเอกสาร Relish ไม่ได้
คุณสามารถเรียกใช้การทดสอบทั้งหมดที่มีสตริงเฉพาะด้วยตัวเลือก - ตัวอย่าง (หรือ -e) :
rspec spec/models/user_spec.rb -e "User is admin"
ฉันใช้อันนั้นมากที่สุด
ในspec_helper.rb
:
RSpec.configure do |config|
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end
แล้วตามรายละเอียดของคุณ:
it 'can do so and so', focus: true do
# This is the only test that will run
end
นอกจากนี้คุณยังสามารถมุ่งเน้นการทดสอบด้วย 'พอดี' หรือยกเว้นด้วย 'xit' เช่น:
fit 'can do so and so' do
# This is the only test that will run
end
config.filter_run_when_matching
และมันสามารถทำงานได้โดยการเพิ่ม:focus
ตัวอย่าง
หรือคุณสามารถส่งผ่านหมายเลขบรรทัด: rspec spec/my_spec.rb:75
- หมายเลขบรรทัดสามารถชี้ไปที่ข้อมูลจำเพาะเดียวหรือบริบท / อธิบายบล็อก (เรียกใช้ข้อมูลจำเพาะทั้งหมดในบล็อกนั้น)
นอกจากนี้คุณยังสามารถสตริงจำนวนหลายบรรทัดพร้อมกับโคลอน:
$ rspec ./spec/models/company_spec.rb:81:82:83:103
เอาท์พุท:
Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
ในฐานะของ RSpec 2.4 (ฉันเดา) คุณสามารถย่อหน้าf
หรือx
เพื่อit
, specify
, describe
และcontext
:
fit 'run only this example' do ... end
xit 'do not run this example' do ... end
http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_method http://rdoc.info/github/rspec/rspec-Core/ExampleGroup#xit-class_method
ต้องแน่ใจว่ามีconfig.filter_run focus: true
และในของคุณconfig.run_all_when_everything_filtered = true
spec_helper.rb
ใน RSpec เวอร์ชันที่ใหม่กว่าการกำหนดค่าการสนับสนุนง่ายยิ่งขึ้นfit
:
# spec_helper.rb
# PREFERRED
RSpec.configure do |c|
c.filter_run_when_matching :focus
end
# DEPRECATED
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
ดู:
https://relishapp.com/rspec/rspec-core/docs/filtering/filter-run-when-matching
https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtered
นอกจากนี้คุณสามารถเรียกใช้ข้อมูลจำเพาะที่มีfocus: true
ตามค่าเริ่มต้น
ข้อมูลจำเพาะ / spec_helper.rb
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
จากนั้นก็วิ่ง
$ rspec
และจะมีการทดสอบเฉพาะจุดโฟกัสเท่านั้น
จากนั้นเมื่อคุณลบfocus: true
การทดสอบทั้งหมดจะถูกเรียกใช้อีกครั้ง
ข้อมูลเพิ่มเติม: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
spec/spec_helper.rb
รวมอยู่เสมอ? หรือเฉพาะในกรณีที่ไม่มีตัวเลือกให้ เหตุใดโมดูลการทดสอบจึงมีrequire 'spec_helber'
และไม่มีรหัสข้างต้นกำจัดความเป็นไปได้ในการรันการทดสอบเดียวโดยการระบุไฟล์ ฉันไม่พบเอกสารใด ๆ เกี่ยวกับเรื่องนี้
spec_helper.rb
จะรวมอยู่เสมอหากคุณมี--require spec_helper
ใน.rspec
รูทโครงการ
rspec spec/models/user_spec.rb -e "SomeContext won't run this"
คุณสามารถใช้เป็น