ฉันจะรันการทดสอบเฉพาะใน Rspec ได้อย่างไร


คำตอบ:


186

การค้นหาเอกสารไม่ใช่เรื่องง่าย แต่คุณสามารถติดแท็กตัวอย่างด้วยแฮช เช่น.

# 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 ให้เรียกใช้การทดสอบแบบ 'โฟกัส' โดยอัตโนมัติ นี้ทำงานได้ดีโดยเฉพาะกับยาม


ดังนั้นคุณจึงไม่ต้องไปค้นหา, การเชื่อมโยงโดยตรงกับข้อเสนอแนะของ Zetetic อยู่ที่นี่ (สำหรับ rspec 2.12) relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/...
tir38

เราเพิ่มข้อมูลจำเพาะลงในชุดของเราเพื่อให้แน่ใจว่าโค้ดจะไม่ถูกรวมเข้ากับโฟกัส: ยังคงเป็นจริงในการควบคุมซอร์ส gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s ฉันใช้ git hook เพื่อบล็อกการคอมมิชชันด้วย:focusซึ่งป้องกันมิให้ไม่พึงประสงค์เช่น 'binding.pry , console.log` ฯลฯ จากการคืบคลานเข้าสู่ codebase
zetetic

1
@Osus no, ฉันเป็นแค่แฟน ๆ :) ฉันชอบสิ่งที่พวกเขาทำกับ Relish แต่เพียงแค่เปิดตัวคุณลักษณะเอกสารของตัวเองดังนั้นเราอาจเห็นการแข่งขันบางอย่าง
zetetic

1
บางทีคุณสามารถชี้ฉันในทางเอกสารที่อธิบายการใช้งานและพฤติกรรมที่แท้จริงของrspecโปรแกรม :) เพราะเอกสาร Relish ไม่ได้
Otheus


90

ใน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

1
ใน rspec 3.5 มันเป็นconfig.filter_run_when_matchingและมันสามารถทำงานได้โดยการเพิ่ม:focusตัวอย่าง
Ali Ghanavatian

4
หาก 'โฟกัส: จริง' มีความมุ่งมั่นโดยไม่ตั้งใจของคุณ CI จะผ่านแม้ว่าจะไม่ได้ทำการทดสอบเกือบทั้งหมด
ซั

67

หรือคุณสามารถส่งผ่านหมายเลขบรรทัด: rspec spec/my_spec.rb:75- หมายเลขบรรทัดสามารถชี้ไปที่ข้อมูลจำเพาะเดียวหรือบริบท / อธิบายบล็อก (เรียกใช้ข้อมูลจำเพาะทั้งหมดในบล็อกนั้น)


50

นอกจากนี้คุณยังสามารถสตริงจำนวนหลายบรรทัดพร้อมกับโคลอน:

$ rspec ./spec/models/company_spec.rb:81:82:83:103

เอาท์พุท:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}

นี่คือทองคำ! 🙇🏾‍♂️
iGbanam

28

ในฐานะของ 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 = truespec_helper.rb


5

ใน 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


3

นอกจากนี้คุณสามารถเรียกใช้ข้อมูลจำเพาะที่มี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'และไม่มีรหัสข้างต้นกำจัดความเป็นไปได้ในการรันการทดสอบเดียวโดยการระบุไฟล์ ฉันไม่พบเอกสารใด ๆ เกี่ยวกับเรื่องนี้
Otheus

1
spec_helper.rbจะรวมอยู่เสมอหากคุณมี--require spec_helperใน.rspecรูทโครงการ
กริช

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