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

现在,如果我使用 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'

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

运行 --trace没有帮助。

22888 次浏览

You must run rspec with -b option to see full backtraces

Another (easier) alternative is to edit the .rspec file, and add the backtrace option. It should look somewhat like this:

--colour
--backtrace

That will give you the full backtrace. Hope this helps.

Another approach is to clear all backtrace exclusion patterns in spec_helper.rb. I like this solution most as I'm able to keep all RSpec settings in one place and get rid of .rspec file or explicit --backtrace in .travis.yml.

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

One more option when all else fails is to just add a rescue block and print out the stack try or add a binding pry statement there and use show-stack.

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

I don't know how to get the controller error to show up in rspec. Sometimes it shows up but I don't know what conditions cause it to show up. Here is a way to see the error fairly quickly though:

Open another terminal session and run:

tail -f log/test.log

Then go back to the terminal session and run just the spec that had the error:

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

Go back to the tail of the log and you should see the error, hopefully without too much other stuff surrounding it (because you ran the failing test by itself).

This will also work:

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