테스트 실패와 관련된 전체 추적을 제공하기 위해 rspec-2를 얻는 방법은 무엇입니까?


96

지금 테스트 도구 모음을 실행 rake spec하면 오류가 발생합니다.

1) SegmentsController GET 'index'가 작동해야합니다.
   실패 / 오류 : '색인'가져 오기
   #에 대한 정의되지 않은 메소드`locale '
   # ./spec/controllers/segments_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 역 추적 필터링을 변경하는 방법이 있습니다
— Bohdan

답변:


244

-b전체 역 추적을 보려면 옵션 과 함께 rspec을 실행해야합니다.


9
나는 그것을 이해하지 못한다. 이것 또는 허용 된 대답은 사양 파일에서 더 이상 역 추적을 제공하지 않습니다. 아니면 나를 위해 단지 O_O 작동하지 않습니다
— 얀코-m

당신이 spork와 RSpec을 사용하는 경우 FWIW 당신이 .rspec 파일을 만들고 테스트 스위트 실행하면 출력을 얻기 위해 그것을 -b 추가 할 수 있습니다 보호
— shicholas

이것은 실제로 정답입니다. 거의 모든 시간에 전체 역 추적 (rails, rspec 및 기타 gem과 같은 항목을 포함)이 필요하지 않습니다. 필요한 유일한 시간은 gem으로 인한 무언가를 디버그하거나 이해하는 것입니다. 그 자체. 따라서 기본 역 추적 클린 패턴을 고수하고 필요할 때 이상한 경우에 -b를 사용하십시오.
— Asfand Qazi

오류 자체에 대한 스택 추적 정보를 표시하지 않았습니다. 오히려, 그것은 RSpec에 보석의 스택 트레이스를 보여 주었다
— Aleksandrus

RSpec 3에서도 작동합니다
— Koen.

29

또 다른 (쉬운) 대안은 .rspec파일 을 편집 하고 backtrace옵션을 추가하는 것입니다. 다음과 같이 보일 것입니다.

--colour
--backtrace

그것은 당신에게 완전한 역 추적을 줄 것입니다. 도움이 되었기를 바랍니다.


예! 이것이 바로 내가 필요한 것입니다. 사양 스택이 아닌 실제 오류에 대한 스택 추적.
— DiegoSalazar

적절한 철자는 다음과 같습니다 color. 나는 당신이 그것을 주문하면 생각 colour몬티 파이썬 농담이 나타날 수 있습니다
— WattsInABox

2
미국 출신이라면 적합합니다. 영국에서 그들은 색깔을 씁니다. 그리고 rspec 사람들은 둘 다 허용하기에 너무 친절합니다;)
— nathanvda

2
보닛에 스패너를 던졌습니다!
— eggmatters 2014

3

이것은 또한 작동합니다.

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

2

또 다른 접근 방식은 spec_helper.rb. 나는이 솔루션과 같은 대부분의 I는 한 곳에서 모든 RSpec에 설정을 유지하고 제거하는 수 있어요으로 .rspec file또는 명시 적 --backtrace에서 .travis.yml.

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

rspec 2.x에는 해당 옵션이없는 것 같습니다.
— Michael Yagudaev 2014-06-16

1

rspec에 컨트롤러 오류를 표시하는 방법을 모르겠습니다. 때로는 나타나지만 어떤 조건으로 인해 나타나는지 모르겠습니다. 다음은 오류를 상당히 빠르게 확인하는 방법입니다.

다른 터미널 세션을 열고 다음을 실행하십시오.

tail -f log/test.log

그런 다음 터미널 세션으로 돌아가 오류가있는 사양 만 실행합니다.

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

로그의 끝 부분으로 돌아 가면 오류를 볼 수 있습니다. (실패한 테스트를 단독으로 실행했기 때문에) 주변에 너무 많은 다른 항목이 없기를 바랍니다.


0

다른 모든 것이 실패 할 때 한 가지 더 옵션은 구조 블록을 추가하고 스택 try를 인쇄하거나 거기에 바인딩 pry 문을 추가하고 사용하는 것 show-stack입니다.

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

이것은 때때로 최선의 선택입니다. 일단 작동되면 제거하십시오. 오류가 발생할 것으로 예상되는 위치를 래핑해야합니다. 아마도 begin및 rescue블록을 컨트롤러의 작업 메서드의 외부 문으로 넣을 수 있습니다. 또는 rescue_from.
— Benjamin Atkin 2014 년

1
@bat 예 이것은 최후의 수단이며 @bat가 말한 것처럼 일단 이해하면 제거해야합니다. git diff커밋하기 전에 항상 베이컨을 절약하십시오.
— Michael Yagudaev 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.