คุณจะเรียกใช้ไฟล์ทดสอบ / ข้อมูลจำเพาะเดียวใน RSpec ได้อย่างไร


282

ฉันต้องการให้สามารถทดสอบไฟล์ข้อมูลจำเพาะเดียวได้เช่นไฟล์เดียวที่ฉันกำลังแก้ไข rake specดำเนินการรายละเอียดทั้งหมด โครงการของฉันไม่ใช่โครงการ Rails ดังนั้นrake spec:docใช้งานไม่ได้

ไม่ทราบว่าเรื่องนี้ แต่นี่คือโครงสร้างไดเรกทอรีของฉัน

./Rakefile
./lib
./lib/cushion.rb
./lib/cushion
./lib/cushion/doc.rb
./lib/cushion/db.rb
./spec
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb

คำตอบ:


392

หรือคุณสามารถข้าม rake และใช้คำสั่ง 'rspec':

rspec path/to/spec/file.rb

ในกรณีของคุณฉันคิดว่าตราบใดที่ไฟล์. / spec/db_spec.rb ของคุณมีผู้ช่วยที่เหมาะสมมันก็น่าจะใช้ได้ดี

หากคุณกำลังใช้ rspec เวอร์ชันเก่ากว่าคือ:

spec path/to/spec/file.rb

31
ด้วย rspec ใหม่คุณต้องใช้ "เส้นทาง rspec / to / file.rb"
djburdick

3
บางทีฉันอาจทำผิด แต่ฉันต้องทำ "bundle exec rspec path / to / spec / file.rb"
andrhamm

2
หากคุณใช้ Rails คุณอาจต้องการรันข้อกำหนดของคุณโดยใช้ Rake เพื่อให้แน่ใจว่าคุณเริ่มต้นจากฐานข้อมูลเปล่า
superluminary

@ andrhamm คุณกำลังเรียกใช้ข้อกำหนดของคุณในบริบทของบันเดิลของคุณ นี้เป็นสิ่งจำเป็นถ้าคุณไม่ได้ใช้ gemsets (ที่มาโดยเริ่มต้นด้วย RVM และเป็นส่วนขยายที่แยกต่างหากเพื่อ rbenv)
คาเลบ

6
หากคุณต้องการเรียกใช้การทดสอบเพียงหนึ่งครั้งคุณต่อท้ายหมายเลขบรรทัดของการเริ่มต้นการทดสอบลงในไฟล์ ตัวอย่าง: rspec path / to / spec / file.rb: 455
runamok

201

การร้องขอดิบ:

ข้อมูลจำเพาะเรค SPEC = ข้อมูลจำเพาะ / ตัวควบคุม / เซสชัน_controller_spec.rb \
          SPEC_OPTS = "- e \" ควรลงชื่อเข้าใช้ด้วย cookie \ ""

ตอนนี้หาวิธีฝังสิ่งนี้ลงในเครื่องมือแก้ไขของคุณ


1
อย่างที่ฉันพูดฉันไม่ได้อยู่ในรางจึงไม่มีผู้ควบคุม แต่ใช่ "rake spec SPEC = file.rb" ใช้งานได้ ขอบคุณ! ฉันกำลังทำงานกับการรวม Emacs ในขณะนี้
Jonathan Tran

5
อย่าเปิด rakefile ถ้าคุณสามารถหลีกเลี่ยงได้ มันใช้เวลาทุกยุคสมัย frickin
Orion Edwards

2
ฉันเปลี่ยนคำตอบที่ยอมรับ แต่พารามิเตอร์ SPEC_OPTS ก็มีประโยชน์กับฉันเช่นกัน
Jonathan Tran

2
นี่คือสิ่งที่ฉันเรียกว่าคำตอบที่ดี เหตุใดจึงไม่ทำเครื่องหมายว่า "คำตอบ"
gmile

1
การรัน spec โดยตรงมักเป็นตัวเลือกที่ดีที่สุด แต่มีหลายครั้งที่คุณต้องเรียกใช้ rake สำหรับบิตเวทย์มนตร์ต่างๆใน Rakefile ที่กำหนดเอง
Nerdmaster

124

คำถามนี้เป็นคำถามเก่า แต่ปรากฏที่ด้านบนของ Google เมื่อค้นหาวิธีการทดสอบเดียว ฉันไม่รู้ว่ามันเป็นส่วนเสริมล่าสุดหรือไม่ แต่ถ้าต้องการทดสอบสเป็กเดียวจากข้อมูลจำเพาะคุณสามารถทำสิ่งต่อไปนี้ได้:

rspec path/to/spec:<line number>

โดยที่ -line number- คือหมายเลขบรรทัดที่มีส่วนของการทดสอบของคุณ ตัวอย่างเช่นหากคุณมีสเป็คเช่น:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

สมมติว่ามันถูกบันทึกไว้ในข้อมูลจำเพาะ / รุ่น / foo_spec.rb จากนั้นคุณจะเรียกใช้:

rspec spec/models/foo_spec.rb:2

และมันก็จะเรียกใช้หนึ่ง spec อันที่จริงตัวเลขนั้นอาจเป็นอะไรก็ได้ตั้งแต่ 2 ถึง 5

หวังว่านี่จะช่วยได้!


สิ่งนี้น่าสนใจแม้ว่ามันจะดูเหมือนว่ามันไม่ทำงานเมื่อคุณ refactor สเป็คของคุณเป็นไฟล์หลาย ๆ ไฟล์ (เช่นคุณสามารถใช้มันกับไฟล์ _spec.rb หลักเท่านั้น แต่ถ้าไม่มีตัวอย่างของคุณอยู่เลยมันจะไม่ทำงานเลย . นอกจากนี้หากคุณพยายามที่จะใช้มันสำหรับไฟล์ที่ไม่ใช่ไฟล์สเปคระดับบนสุด, มันก็จะไม่เรียกใช้อะไรเลย)
Trejkaz

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

ฉันสามารถใช้ไฟล์นี้ในระดับใดก็ได้ภายใต้ข้อมูลจำเพาะ / ไดเรกทอรี ฉันเชื่อว่า Trejkaz ไม่ถูกต้อง
Michael Durrant

7
นี่เป็นสิ่งที่ยอดเยี่ยมและควรอยู่ด้านบน!
Tommaso Barbugli

4
ฉันใช้มันตลอดเวลา แต่บางครั้งคุณต้องการเรียกใช้การทดสอบหลายอย่างจากไฟล์เดียว จากนั้นคุณสามารถพิมพ์ตัวอย่างทั้งหมดดังนี้:rspec spec/models/foo_spec.rb:2:12:49
swilgosz

61

คุณสามารถใช้ข้อความจริงของกรณีทดสอบ * e * xample ด้วย-e!

ดังนั้นสำหรับ:

it "shows the plane arrival time"

คุณสามารถใช้ได้

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

ไม่จำเป็นต้องเสาะหาที่นี่


นี่คือสิ่งที่คุณต้องการยกเว้นว่า "สเปค" ควรถูกแทนที่ด้วย "rspec" ตามที่ระบุไว้ @ bandhunt
Nicolas Wormser

19

จากความช่วยเหลือ (spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

ตัวอย่าง: spec spec / runner_spec.rb -l 162


3
ในเวอร์ชัน Rspec ที่ใหม่กว่าคุณต่อท้ายหมายเลขบรรทัดหลังเครื่องหมายจุดคู่:ต่อเอกสารและคำตอบที่ได้รับความนิยม
dragon788

13

หากคุณติดตั้ง rspec เป็นปลั๊กอินแทนที่จะเป็นอัญมณีคุณจะไม่มีspecไฟล์ปฏิบัติการ

สิ่งที่คุณต้องทำคือเรียกใช้ไฟล์โดยใช้ ruby รหัส rspec นั้นฉลาดพอที่จะทำการทดสอบให้คุณได้

เช่น:

ruby myclass_spec.rb

2
เป็นไปได้ไหมที่จะทำการทดสอบหนึ่งครั้งภายในไฟล์เช่นนี้?
Ian Vaughan

12

http://github.com/grosser/single_testให้คุณทำสิ่งต่าง ๆ เช่น ..

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last

ดูเหมือนว่าอัญมณียังไม่ได้รับการบำรุงรักษาความมุ่งมั่นครั้งล่าสุดเมื่อ 5 ปีที่แล้ว!
thegreendroid

10

Ruby 1.9.2 และ Rails 3 มีวิธีที่ง่ายในการรันหนึ่งไฟล์ spec:

  ruby -I ข้อมูลจำเพาะ spec / รุ่น / user_spec.rb

คำอธิบาย:

  • rubyคำสั่งมีแนวโน้มที่จะเร็วกว่าrakeคำสั่ง
  • -I spec หมายถึง "รวมไดเรกทอรี 'spec' เมื่อค้นหาไฟล์"
  • spec/models/user_spec.rb เป็นไฟล์ที่เราต้องการเรียกใช้

คุณสามารถเรียกใช้การทดสอบหนึ่งไฟล์ภายในด้วยตัวเลือกพิเศษบางอย่างได้หรือไม่?
Ian Vaughan

10

ในการรันไฟล์ rspec ทั้งหมดของคุณ:rspec

หมายเหตุ: คุณต้องอยู่ในรากของโครงการของคุณ

ในการรันหนึ่งไฟล์ rspec:rspec 'path_to/spec.rb'

หมายเหตุ: แทนที่ 'path_to / spec.rb' ด้วยเส้นทางของคุณ เครื่องหมายคำพูดเป็นตัวเลือก

เมื่อต้องการเรียกใช้อย่างใดอย่างหนึ่ง rspec ทดสอบจากแฟ้มที่หนึ่ง:rspec 'path_to/spec.rb:7'

หมายเหตุ:: 7 คือหมายเลขบรรทัดที่การทดสอบเริ่มต้นขึ้น


5

ฉันมีปัญหาในการทำให้ตัวอย่างเหล่านี้ทำงานบางทีอาจเป็นเพราะโพสต์เก่าและคำสั่งเปลี่ยนไปหรือไม่

หลังจากแหย่ไปรอบ ๆ ฉันพบว่างานนี้:

ข้อมูลจำเพาะ rspec / รุ่น / user_spec.rb

ที่จะเรียกใช้เพียงไฟล์เดียวและให้ผลลัพธ์ที่เป็นประโยชน์ใน terminal


นี่ถูกกล่าวถึงในความคิดเห็นในคำตอบที่ยอมรับ ใช่ฉันคิดว่าโพสต์นี้เก่ามากจนชื่อคำสั่งเปลี่ยนไป
Jonathan Tran

4

specky.vim


3

หรือดูที่ autotest

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

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


3

แม้ว่าจะมีคำตอบที่ดีมากมายที่เขียนถึงคำถามนี้ แต่ก็ไม่มีใครใช้วิธีRspectags

ฉันใช้แท็กเพื่อเรียกใช้ข้อกำหนดหนึ่งข้อขึ้นไปในไฟล์ต่าง ๆ - เฉพาะที่เกี่ยวข้องกับงานพัฒนาปัจจุบันของฉัน

ตัวอย่างเช่นฉันเพิ่มแท็ก "dev" ด้วยค่า "current":

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

จากนั้นฉันก็วิ่ง

bundle exec rspec . --tag dev:current

แท็ก / ค่าที่แตกต่างกันสามารถตั้งค่าได้ในรายละเอียดหรือกลุ่ม


2

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

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

หากคุณต้องการเรียกใช้รายละเอียดทั้งหมดในหนึ่งเดียวสั้น ๆ

   rspec 

หากคุณต้องการเรียกใช้รายละเอียดทั้งหมดในผู้ใช้ตัวควบคุมที่เฉพาะเจาะจงนี้

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

หวังว่ามันจะช่วยให้คุณเข้าใจมากขึ้น!

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