Right now if I run my test suite using rake spec
I get an error:
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 '
This is normal as I do have an error :)
The problem is that the trace isn't very helpful. I know it broke in segments_controller_spec.rb
, line 14, but this is just where I call the test:
### segments_controller_spec.rb:14
get 'index'
I would prefer to have the actual line breaking and the complete trace, not the part in the spec folder.
Running with --trace
doesn't help.
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.
color
. I think if you spell it colour
a Monty Python joke might appear
This will also work:
# rails_helper.rb
RSpec.configure do |config|
config.full_backtrace = true
end
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
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).
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 ""
begin
and rescue
block as the outer statement of the controller's action method. Or use rescue_from
.
git diff
before committing it will save your bacon.
Success story sharing