테스트 실패와 관련된 전체 추적을 제공하기 위해 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 ""

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

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