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

Posted

技术标签:

【中文标题】如何让 rspec-2 提供与测试失败相关的完整跟踪?【英文标题】:How to get rspec-2 to give the full trace associated with a test failure? 【发布时间】:2011-11-30 17:34:57 【问题描述】:

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

1) SegmentsController GET 'index' 应该可以工作 失败/错误:获取“索引” # 未定义的方法“区域设置” # ./spec/controllers/segments_controller_spec.rb:14: 在`块(3级)中'

这是正常的,因为我确实有错误:)

问题是跟踪不是很有帮助。我知道它在 segments_controller_spec.rb 第 14 行出现故障,但这正是我称之为测试的地方:

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

我希望有实际的换行和完整的跟踪,而不是规范文件夹中的部分。

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

【问题讨论】:

检查spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering有办法改变默认的RSpec回溯过滤 【参考方案1】:

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

【讨论】:

我不明白,无论是这个还是接受的答案都没有让你从你的规范文件中进一步回溯。或者它不仅对我有用o_O 如果你将 rspec 与 spork 和 guard 一起使用,你可以创建一个 .rspec 文件并在其中添加 -b 以在运行测试套件时获取输出 这确实是正确的答案——几乎所有时候你都不需要完整的回溯(包括诸如 rails 和 rspec 以及其他 gems 之类的东西)——你唯一需要的时候就是调试或理解由 gem 本身引起的东西。因此,请坚持使用默认的回溯清理模式,并在需要时在奇怪的情况下使用 -b。 它没有显示有关错误本身的堆栈跟踪信息。相反,它显示了 rspec gem 的堆栈跟踪 也适用于 RSpec 3【参考方案2】:

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

--colour
--backtrace

这将为您提供完整的回溯。 希望这会有所帮助。

【讨论】:

是的!这正是我所需要的。堆栈跟踪到实际错误而不是规范堆栈。 我相信正确的拼写是color。我想如果你拼写它colour 可能会出现一个巨蟒笑话 适合您来自美国。在英国,他们写颜色,而 rspec 的人非常友好地允许两者;) 这把扳手扔进了引擎盖!【参考方案3】:

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

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

【讨论】:

在 rspec 2.x 中似乎没有该选项。【参考方案4】:

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

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

【讨论】:

这有时是最好的选择。只要确保在它开始工作后将其移除即可。它应该包含您期望错误所在的位置。也许将beginrescue 块作为控制器操作方法的外部语句。或使用rescue_from @bat 是的,这是最后的尝试,就像@bat 所说,一旦你弄清楚了就需要删除它。永远记得在提交之前做你的git diff,这会节省你的培根。【参考方案5】:

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

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

tail -f log/test.log

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

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

回到日志的尾部,您应该会看到错误,希望周围没有太多其他内容(因为您自己运行了失败的测试)。

【讨论】:

【参考方案6】:

这也可以:

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

【讨论】:

以上是关于如何让 rspec-2 提供与测试失败相关的完整跟踪?的主要内容,如果未能解决你的问题,请参考以下文章

Rspec 2 配置:类型类型

Maven 完整的安全报告,包括通过的测试记录事件

rake 规范不使用 rails 环境

持续集成和验收测试驱动开发

动态 bouncycastle 提供者注册失败

如何让浓缩咖啡测试在特定条件下失败