如何获得rspec-2给出与测试失败相关的完整跟踪?


96

现在,如果我使用我的测试套件运行,rake spec则会出现错误:

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

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

问题在于该跟踪不是很有帮助。我知道它闯入了segments_controller_spec.rb第14行,但这就是我称之为测试的地方:

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

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

运行--trace无济于事。


2
检查spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering有一种方法可以更改默认的RSpec回溯过滤
Bohdan

Answers:


244

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


9
我不明白,这个或公认的答案都没有给您提供比标准文件更远的回溯信息。或仅对我而言不起作用o_O
janko-m 2012年

如果您将rspec与spork结合使用并进行保护,则可以再次创建,您可以创建一个.rspec文件并在运行测试套件时向其添加-b以获取输出
shicholas 2013年

这确实是正确的答案-几乎所有时间都不需要完整的回溯(包括rails,rspec和其他gems之类的东西)-您唯一需要的时间是调试或了解由gem引起的某些事情本身。因此,请坚持使用默认的backtrace干净模式,并在需要时使用-b(在奇怪的情况下)。
阿桑德·卡兹

它没有显示有关错误本身的堆栈跟踪信息。而是显示了rspec宝石的堆栈轨迹
Aleksandrus

同样适用于RSpec 3
Koen。

29

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

--colour
--backtrace

这将为您提供完整的回溯。希望这可以帮助。


是! 这正是我所需要的。堆栈跟踪到实际错误,而不是规范堆栈。
DiegoSalazar

我相信适当的拼写是color。我认为,如果您拼写它,colour可能会出现Monty Python笑话
WattsInABox 2014年

2
如果您来自美国,那就合适了。在英国,他们会写彩色,而rspec
族人非常乐意

2
那把扳手扔了!
eggmatters 2014年

3

这也将起作用:

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

2

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

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

在rspec 2.x中似乎没有该选项。
Michael Yagudaev 2014年

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 ""

有时这是最好的选择。只要确保将其启用,便将其删除。它应该包裹您期望错误发生的地方。也许将beginand rescue块作为控制器的action方法的外部语句。或使用rescue_from
本杰明·阿特金2014年

1
@bat是的,这是最后的尝试,就像@bat所说的,一旦您弄清楚了就需要将其删除。始终记得git diff在提交前先做,这样可以节省培根。
Michael Yagudaev 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.