Bir test başarısızlığıyla ilişkili tam izleme sağlamak için rspec-2 nasıl elde edilir?


96

Şu anda test paketimi kullanarak çalıştırırsam rake specbir hata alıyorum:

1) SegmentsController GET 'indeksi' çalışmalıdır
   Hata / Hata: 'indeks' al
   # için tanımlanmamış yöntem `yerel ayarı '
   # ./spec/controllers/segments_controller_spec.rb:14:
      blokta (3 seviye)

Bir hatam olduğundan bu normaldir :)

Sorun, izlemenin pek yardımcı olmamasıdır. Girdiğini biliyorum segments_controller_spec.rb, 14. satır, ama test dediğim yer burası:

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

Özellik klasöründeki kısmı değil, gerçek satır kırma ve tam izlemeyi tercih ederim.

Birlikte koşmak --traceyardımcı olmuyor.


2
Spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering'i kontrol edin Varsayılan RSpec geri izleme filtrelemesini değiştirmenin bir yolu var
Bohdan

Yanıtlar:


244

-bTam geri izlemeleri görmek için seçenekle birlikte rspec çalıştırmalısınız


9
Anlayamıyorum, ne bu ne de kabul edilen cevap size spesifikasyon dosyanızdan daha ileri bir geri izleme sağlar. Ya da sadece benim için çalışmıyor o_O
janko-m

ve fwiw, spork ve guard ile birlikte rspec kullanırsanız, bir .rspec dosyası oluşturabilir ve test paketinizi çalıştırdığınızda çıktı almak için buna -b ekleyebilirsiniz
shicholas

Bu gerçekten doğru cevap - tam geri izlemeye (raylar, rspec ve diğer taşlar gibi şeyler dahil) neredeyse her zaman ihtiyacınız yok - ihtiyacınız olan tek zaman, cevherin neden olduğu bir şeyi hata ayıklamak veya anlamaktır. kendisi. Bu nedenle, varsayılan geri izleme temiz kalıplarına bağlı kalın ve ihtiyacınız olduğunda garip durumda -b'yi kullanın.
Asfand Qazi

Hatanın kendisi hakkında yığın izleme bilgisi göstermedi. Daha ziyade, rspec mücevherinin yığın izini gösterdi
Aleksandrus

RSpec 3 için de çalışıyor
Koen.

29

Diğer (daha kolay) bir alternatif, .rspecdosyayı düzenlemek ve backtraceseçeneği eklemektir . Biraz şuna benzemeli:

--colour
--backtrace

Bu size tam bir geri izleme sağlayacaktır. Bu yardımcı olur umarım.


Evet! bu tam olarak ihtiyacım olan şey. özellik yığınına değil gerçek hataya kadar yığın izleme.
DiegoSalazar

Uygun yazımın olduğuna inanıyorum color. Sanırım bunu colour
hecelerseniz

2
Amerika'dan iseniz uygun. Birleşik Krallık'ta renkli yazıyorlar ve rspec
milleti

2
Kaputun içine bir anahtar atıldı!
eggmatters

3

Bu da işe yarayacak:

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

2

Diğer bir yaklaşım, içindeki tüm geri izleme dışlama kalıplarını temizlemektir spec_helper.rb. Ben bu çözümün en gibi tek bir yerde RSpec ayarları korumak ve kurtulmak mümkün değilim gibi .rspec fileveya açık --backtraceyer .travis.yml.

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

Rspec 2.x'te bu seçeneğe sahip görünmüyor.
Michael Yagudaev

1

Denetleyici hatasını rspec'de nasıl göstereceğimi bilmiyorum. Bazen ortaya çıkıyor ama hangi koşulların ortaya çıkmasına neden olduğunu bilmiyorum. Hatayı oldukça hızlı bir şekilde görmenin bir yolu:

Başka bir terminal oturumu açın ve çalıştırın:

tail -f log/test.log

Ardından terminal oturumuna geri dönün ve yalnızca hatayı içeren spesifikasyonu çalıştırın:

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

Günlüğün kuyruğuna geri dönün ve umarım onu ​​çevreleyen çok fazla şey olmadan hatayı görmelisiniz (çünkü başarısız testi kendi başına çalıştırdınız).


0

Her şey başarısız olduğunda bir seçenek daha, sadece bir kurtarma bloğu eklemek ve yığını yazdırmaktır, deneyin veya orada bir bağlama gözetleme ifadesi ekleyin ve kullanın show-stack.

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

Bu bazen en iyi seçenektir. Çalışmaya başladıktan sonra çıkardığınızdan emin olun. Hatanın olmasını beklediğiniz yeri sarmalıdır. Belki beginve rescuebloğunu denetleyicinin eylem yönteminin dış ifadesi olarak koyun . Veya kullanın rescue_from.
Benjamin Atkin

1
@bat evet, bu son çare denemesidir ve @bat'ın söylediği gibi, çözdüğünüzde kaldırılması gerekir. Her zaman git difftaahhütte bulunmadan önce pastırmanızı kurtaracağını unutmayın.
Michael Yagudaev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.