Làm thế nào để rspec-2 cung cấp toàn bộ dấu vết liên quan đến lỗi thử nghiệm?


96

Ngay bây giờ nếu tôi chạy bộ thử nghiệm của mình bằng cách sử dụng, rake spectôi gặp lỗi:

1) SegmentController GET 'chỉ mục' sẽ hoạt động
   Thất bại / Lỗi: lấy 'chỉ mục'
   phương thức không xác định `locale 'cho #
   # ./spec/controllers/searies_controller_spec.rb:14:
      trong `khối (3 cấp độ) trong '

Điều này là bình thường vì tôi có một lỗi :)

Vấn đề là dấu vết không hữu ích lắm. Tôi biết nó đã đột nhập segments_controller_spec.rb, dòng 14, nhưng đây chỉ là nơi tôi gọi là kiểm tra:

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

Tôi muốn có sự phá vỡ dòng thực tế và dấu vết hoàn chỉnh, không phải một phần trong thư mục đặc tả.

Chạy với --tracekhông giúp ích gì.


2
Kiểm tra spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering Có một cách để thay đổi mặc định RSpec backtrace lọc
Bohdan

Câu trả lời:


244

Bạn phải chạy rspec với -btùy chọn để xem đầy đủ các dấu vết


9
Tôi không hiểu, cả câu trả lời này hoặc câu trả lời được chấp nhận đều không cung cấp cho bạn dấu vết xa hơn sau đó từ tệp đặc tả của bạn. Hoặc nó không hoạt động chỉ với tôi o_O
janko-m

và fwiw nếu bạn sử dụng rspec với spork và bảo vệ, bạn có thể tạo tệp .rspec và thêm -b vào tệp đó để nhận đầu ra khi bạn chạy bộ thử nghiệm của mình
shicholas

Đây thực sự là câu trả lời chính xác - bạn không cần backtrace đầy đủ (bao gồm những thứ như rails và rspec và các loại đá quý khác) hầu như mọi lúc - lần duy nhất bạn cần nó là gỡ lỗi hoặc hiểu điều gì đó do đá quý gây ra chinh no. Vì vậy, hãy tuân theo các mẫu sạch backtrace mặc định và sử dụng -b trong trường hợp kỳ quặc khi bạn cần.
Asfand Qazi

Nó không hiển thị thông tin theo dõi ngăn xếp về chính lỗi. Thay vào đó, nó cho thấy stack trace của đá quý rspec
Aleksandrus

Cũng hoạt động cho RSpec 3
Koen.

29

Một thay thế khác (dễ dàng hơn) là chỉnh sửa .rspectệp và thêm backtracetùy chọn. Nó sẽ giống như sau:

--colour
--backtrace

Điều đó sẽ cung cấp cho bạn đầy đủ hậu quả. Hi vọng điêu nay co ich.


Đúng! đây chính xác là những gì tôi cần. ngăn xếp theo dõi lỗi thực tế không phải ngăn xếp thông số kỹ thuật.
DiegoSalazar

Tôi tin rằng cách viết phù hợp là color. Tôi nghĩ rằng nếu bạn đánh vần từ đó colourlà một trò đùa Monty Python có thể xuất hiện
WattsInABox

2
Thích hợp nếu bạn đến từ Mỹ. Tại Anh họ viết màu, và các folks rspec rất tốt bụng để cho phép cả hai;)
nathanvda

2
Đó là một cờ lê trong nắp ca-pô!
Eggmatters vào

3

Điều này cũng sẽ hoạt động:

# rails_helper.rb
RSpec.configure do |config|
  config.full_backtrace = true
end

2

Một cách tiếp cận khác là xóa tất cả các mẫu loại trừ backtrace trong spec_helper.rb. Tôi như giải pháp này hầu hết là tôi có thể giữ tất cả các thiết lập RSpec ở một nơi và thoát khỏi .rspec filehoặc rõ ràng --backtracetrong .travis.yml.

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

Dường như không có tùy chọn đó trong rspec 2.x.
Michael Yagudaev

1

Tôi không biết làm thế nào để lỗi bộ điều khiển hiển thị trong rspec. Đôi khi nó hiển thị nhưng tôi không biết điều kiện nào khiến nó hiển thị. Đây là một cách để xem lỗi khá nhanh mặc dù:

Mở một phiên đầu cuối khác và chạy:

tail -f log/test.log

Sau đó quay lại phiên đầu cuối và chỉ chạy thông số kỹ thuật có lỗi:

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

Quay trở lại phần đuôi của nhật ký và bạn sẽ thấy lỗi, hy vọng rằng không có quá nhiều thứ khác xung quanh nó (vì bạn đã chạy bài kiểm tra không thành công).


0

Một lựa chọn nữa khi tất cả những cách khác không thành công là chỉ cần thêm một khối cứu hộ và in ra ngăn xếp, thử hoặc thêm một câu lệnh pry ràng buộc vào đó và sử dụng show-stack.

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

Đây đôi khi là lựa chọn tốt nhất. Chỉ cần đảm bảo rằng bạn xóa nó khi bạn bắt đầu hoạt động. Nó sẽ quấn vào nơi bạn mong đợi lỗi. Có lẽ đặt beginrescuekhối làm câu lệnh bên ngoài của phương thức hành động của bộ điều khiển. Hoặc sử dụng rescue_from.
Benjamin Atkin

1
@bat vâng, đây là nỗ lực cuối cùng và như @bat đã nói cần phải được xóa khi bạn đã tìm ra. Luôn nhớ làm git difftrước khi thực hiện nó sẽ giúp bạn tiết kiệm được thịt xông khói.
Michael Yagudaev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.