首页 文章

如何让rspec-2提供与测试失败相关的完整跟踪?

提问于
浏览
92

现在,如果我使用 rake spec 运行我的测试套件,我收到一个错误:

1) SegmentsController GET 'index' should work
   Failure/Error: get 'index'
   undefined method `locale' for #
   # ./spec/controllers/segments_controller_spec.rb:14:
      in `block (3 levels) in '

这是正常的,因为我有一个错误:)

问题是跟踪不是很有帮助 . 我知道它在 segments_controller_spec.rb ,第14行打破了,但这只是我称之为测试的地方:

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

我更喜欢实际的断行和完整的跟踪,而不是spec文件夹中的部分 .

使用 --trace 运行没有帮助 .

6 回答

  • 0

    您必须使用 -b 选项运行rspec才能看到完整的回溯

  • 29

    另一种(更简单的)替代方法是编辑 .rspec 文件,并添加 backtrace 选项 . 它应该看起来像这样:

    --colour
    --backtrace
    

    这将给你完整的回溯 . 希望这可以帮助 .

  • 0

    这也有效:

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

    另一种方法是清除 spec_helper.rb 中的所有回溯排除模式 . 我最喜欢这个解决方案,因为我能够将所有RSpec设置保存在一个地方,并在 .travis.yml 中摆脱 .rspec file 或显式 --backtrace .

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

    所有其他方法都失败的另一个选择是添加一个救援块并打印出堆栈尝试或在那里添加一个绑定的pry语句并使用 show-stack .

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

    我不知道如何在rspec中显示控制器错误 . 有时会出现,但我不知道是什么条件导致它出现 . 以下是一种快速查看错误的方法:

    打开另一个终端会话并运行:

    tail -f log/test.log
    

    然后返回终端会话并运行出现错误的规范:

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

    回到日志的尾部,你应该看到错误,希望没有太多其他的东西围绕它(因为你自己运行失败的测试) .

相关问题