Bagaimana cara mendapatkan rspec-2 untuk memberikan jejak lengkap yang terkait dengan kegagalan pengujian?

96

Saat ini jika saya menjalankan rangkaian pengujian menggunakan rake specsaya mendapatkan kesalahan:

1) SegmentsController GET 'index' harus bekerja
   Kegagalan / Kesalahan: dapatkan 'indeks'
   metode `` lokal '' untuk #
   # ./spec/controllers/segments_controller_spec.rb:14:
      di `blok (3 level) di '

Ini normal karena saya memiliki kesalahan :)

Masalahnya adalah jejaknya tidak terlalu membantu. Saya tahu itu rusak segments_controller_spec.rb, baris 14, tetapi di sinilah saya menyebutnya tes:

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

Saya lebih suka memiliki pemutusan baris aktual dan jejak lengkap, bukan bagian dalam folder spesifikasi.

Berlari dengan --tracetidak membantu.

marcgg
sumber
2
Periksa spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering Ada cara untuk mengubah filter pelacakan latar belakang RSpec default
Bohdan

Jawaban:

244

Anda harus menjalankan rspec dengan -bopsi untuk melihat jejak latar lengkap

solnic
sumber
9
Saya tidak mengerti, baik ini atau jawaban yang diterima tidak memberi Anda penelusuran mundur lebih jauh dari file spesifikasi Anda. Atau itu tidak bekerja hanya untuk saya o_O
janko-m
dan fwiw jika Anda menggunakan rspec dengan spork dan guard, Anda dapat membuat file .rspec dan menambahkan -b padanya untuk mendapatkan keluaran saat Anda menjalankan rangkaian pengujian
shicholas
Ini memang jawaban yang benar - Anda tidak memerlukan backtrace lengkap (yang mencakup hal-hal seperti rel dan rspec dan permata lainnya) hampir sepanjang waktu - satu-satunya saat Anda membutuhkannya adalah men-debug atau memahami sesuatu yang disebabkan oleh permata. diri. Jadi tetap gunakan pola bersih backtrace default, dan gunakan -b dalam kasus aneh saat Anda membutuhkannya.
Asfand Qazi
Itu tidak menampilkan info pelacakan tumpukan tentang kesalahan itu sendiri. Sebaliknya, itu menunjukkan jejak tumpukan permata rspec
Aleksandrus
Bekerja untuk RSpec 3 juga
Koen.
29

Alternatif lain (yang lebih mudah) adalah mengedit .rspecfile, dan menambahkan backtraceopsi. Ini akan terlihat seperti ini:

--colour
--backtrace

Itu akan memberi Anda backtrace penuh. Semoga ini membantu.

nathanvda
sumber
Iya! inilah yang saya butuhkan. pelacakan tumpukan ke kesalahan sebenarnya bukan tumpukan spesifikasi.
DiegoSalazar
Saya yakin ejaan yang tepat adalah color. Saya pikir jika Anda mengejanya, colourlelucon Monty Python mungkin muncul
WattsInABox
2
Tepat jika Anda berasal dari Amerika. Di Inggris mereka menulis warna, dan orang-orang rspec begitu baik untuk memungkinkan kedua;)
nathanvda
2
Itu melempar kunci pas di kap mesin!
eggmatters
3

Ini juga akan berfungsi:

# rails_helper.rb
RSpec.configure do |config|
  config.full_backtrace = true
end
Maria V
sumber
2

Pendekatan lainnya adalah dengan menghapus semua pola pengecualian lacak balik di spec_helper.rb. Aku seperti solusi ini yang paling karena saya bisa menyimpan semua pengaturan RSpec di satu tempat dan menyingkirkan .rspec fileatau eksplisit --backtracedalam .travis.yml.

# spec_helper.rb
RSpec.configure do |config|
  config.backtrace_exclusion_patterns = []
end
Nowaker
sumber
Tampaknya tidak memiliki opsi itu di rspec 2.x.
Michael Yagudaev
1

Saya tidak tahu bagaimana membuat kesalahan pengontrol muncul di rspec. Terkadang itu muncul tetapi saya tidak tahu kondisi apa yang menyebabkannya muncul. Berikut adalah cara untuk melihat kesalahan dengan cukup cepat:

Buka sesi terminal lain dan jalankan:

tail -f log/test.log

Kemudian kembali ke sesi terminal dan jalankan hanya spesifikasi yang memiliki kesalahan:

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

Kembali ke ekor log dan Anda akan melihat kesalahan, semoga tanpa terlalu banyak hal lain di sekitarnya (karena Anda menjalankan pengujian yang gagal dengan sendirinya).

Benjamin Atkin
sumber
0

Satu opsi lagi ketika semuanya gagal adalah dengan menambahkan blok penyelamatan dan mencetak tumpukan percobaan atau menambahkan pernyataan pry yang mengikat di sana dan menggunakannya show-stack.

rescue Exception => e
  puts ""
  puts e.backtrace
  puts ""
Michael Yagudaev
sumber
Ini terkadang merupakan pilihan terbaik. Pastikan Anda menghapusnya setelah Anda membuatnya berfungsi. Ini harus membungkus tempat di mana Anda mengharapkan kesalahan itu. Mungkin menempatkan blok begindan rescuesebagai pernyataan luar dari metode aksi pengontrol. Atau gunakan rescue_from.
Benjamin Atkin
1
@bat ya ini adalah upaya terakhir dan seperti @bat berkata perlu dihapus setelah Anda mengetahuinya. Selalu ingat untuk melakukan git diffsebelum melakukannya akan menghemat daging Anda.
Michael Yagudaev