วิธีรับ rspec-2 เพื่อให้การติดตามทั้งหมดที่เกี่ยวข้องกับความล้มเหลวในการทดสอบ


96

ตอนนี้ถ้าฉันเรียกใช้ชุดทดสอบโดยใช้ไฟล์ rake specฉันได้รับข้อผิดพลาด:

1) SegmentController GET 'index' ควรใช้งานได้
   ความล้มเหลว / ข้อผิดพลาด: รับ 'ดัชนี'
   วิธีการที่ไม่ได้กำหนด `` locale 'สำหรับ #
   # ./spec/controllers/se segment_controller_spec.rb:14:
      ใน `` บล็อก (3 ระดับ) ใน '

นี่เป็นเรื่องปกติเนื่องจากฉันมีข้อผิดพลาด :)

ปัญหาคือการติดตามไม่เป็นประโยชน์มากนัก ฉันรู้ว่ามันพังในsegments_controller_spec.rbบรรทัดที่ 14 แต่นี่คือที่ที่ฉันเรียกการทดสอบ:

### segments_controller_spec.rb:14
get 'index'

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

วิ่งไปด้วย--traceไม่ช่วยอะไร


2
ตรวจสอบspin.atomicobject.com/2010/12/28/rspec-backtrace-filteringมีวิธีเปลี่ยนการกรอง RSpec backtrace เริ่มต้น
Bohdan

คำตอบ:


244

คุณต้องเรียกใช้ rspec พร้อม-bตัวเลือกเพื่อดู backtraces แบบเต็ม


9
ฉันไม่เข้าใจไม่ว่านี่หรือคำตอบที่ยอมรับจะให้การติดตามย้อนกลับจากไฟล์ข้อมูลจำเพาะของคุณ หรือมันใช้ไม่ได้กับฉันเท่านั้น o_O
janko-m

และ fwiw หากคุณใช้ rspec กับ spork และ guard คุณสามารถสร้างไฟล์. rspec และเพิ่ม -b เพื่อรับเอาต์พุตเมื่อคุณเรียกใช้ชุดทดสอบ
shicholas

นี่เป็นคำตอบที่ถูกต้อง - คุณไม่จำเป็นต้องใช้ backtrace แบบเต็ม (ซึ่งรวมถึงสิ่งของเช่นรางและ rspec และอัญมณีอื่น ๆ ) เกือบตลอดเวลา - ครั้งเดียวที่คุณต้องการคือการดีบักหรือทำความเข้าใจบางสิ่งที่เกิดจากอัญมณี ตัวเอง ดังนั้นให้ยึดติดกับรูปแบบการล้างข้อมูลย้อนหลังเริ่มต้นและใช้ -b ในกรณีที่แปลกเมื่อคุณต้องการ
Asfand Qazi

ไม่แสดงข้อมูลการติดตามสแต็กเกี่ยวกับข้อผิดพลาดเอง แต่มันแสดงให้เห็นสแต็กแทร็กของอัญมณี rspec
Aleksandrus

ใช้ได้กับ RSpec 3 เช่นกัน
Koen

29

อีกทางเลือกหนึ่ง (ง่ายกว่า) คือแก้ไข.rspecไฟล์และเพิ่มbacktraceตัวเลือก ควรมีลักษณะดังนี้:

--colour
--backtrace

ที่จะทำให้คุณมี backtrace เต็มรูปแบบ หวังว่านี่จะช่วยได้


ใช่ นี่คือสิ่งที่ฉันต้องการ สแต็กติดตามข้อผิดพลาดจริงไม่ใช่สแต็กข้อมูลจำเพาะ
DiegoSalazar

colorผมเชื่อว่าการสะกดคำที่เหมาะสมคือ ฉันคิดว่าถ้าคุณสะกดcolourเป็นเรื่องตลกของ Monty Python อาจปรากฏขึ้น
WattsInABox

2
เหมาะสมถ้าคุณมาจากอเมริกา ในสหราชอาณาจักรพวกเขาเขียนสีและคน rspec ใจดีมากที่ยอมให้ทั้งสองอย่าง;)
nathanvda

2
ที่โยนประแจในฝากระโปรง!
ตีไข่


2

อีกวิธีหนึ่งคือการล้างรูปแบบการยกเว้น backtrace ทั้งหมดในspec_helper.rb. ฉันชอบการแก้ปัญหานี้มากที่สุดที่ฉันสามารถที่จะให้การตั้งค่า RSpec ทั้งหมดในที่เดียวและได้รับการกำจัด.rspec fileหรืออย่างชัดเจนใน--backtrace.travis.yml

# spec_helper.rb
RSpec.configure do |config|
  config.backtrace_exclusion_patterns = []
end

ดูเหมือนจะไม่มีตัวเลือกนั้นใน rspec 2.x
Michael Yagudaev

1

ฉันไม่ทราบวิธีรับข้อผิดพลาดของคอนโทรลเลอร์เพื่อแสดงใน rspec บางครั้งมันก็แสดงขึ้นมา แต่ฉันไม่รู้ว่าเงื่อนไขอะไรที่ทำให้มันแสดงขึ้นมา นี่คือวิธีดูข้อผิดพลาดค่อนข้างเร็วแม้ว่า:

เปิดเซสชันเทอร์มินัลอื่นและเรียกใช้:

tail -f log/test.log

จากนั้นกลับไปที่เซสชันเทอร์มินัลและเรียกใช้เฉพาะข้อมูลจำเพาะที่มีข้อผิดพลาด:

bin/rspec -b spec/requests/posts/index_spec.rb

กลับไปที่ส่วนท้ายของบันทึกและคุณจะเห็นข้อผิดพลาดหวังว่าจะไม่มีสิ่งอื่น ๆ ล้อมรอบมากเกินไป (เพราะคุณทำการทดสอบที่ล้มเหลวด้วยตัวเอง)


0

show-stackหนึ่งในตัวเลือกมากขึ้นเมื่อทุกคนอื่นไม่เป็นเพียงการเพิ่มบล็อกกู้ภัยและพิมพ์ออกมาลองสแต็คหรือเพิ่มงบแงะมีผลผูกพันและมีการใช้งาน

rescue Exception => e
  puts ""
  puts e.backtrace
  puts ""

บางครั้งนี่เป็นตัวเลือกที่ดีที่สุด ตรวจสอบให้แน่ใจว่าคุณลบออกเมื่อใช้งานได้แล้ว ควรปิดสถานที่ที่คุณคาดว่าจะเกิดข้อผิดพลาด บางทีใส่beginและrescueบล็อกเป็นคำสั่งภายนอกของวิธีการดำเนินการของคอนโทรลเลอร์ หรือใช้rescue_from.
Benjamin Atkin

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