ruby-on-railsrspecruby-debugpry

Start ruby debugger if rspec test fails


Often, when a test fails, I spend quite sometime trying to figure out the what caused it to fail. It'd be useful if RSpec could kick off a Ruby debugger when the test fails, so that I can inspect the local variables immediately to drill down on the cause.

The work-around I'm using right now looks something like this:

# withing some test
debugger unless some_variable.nil?
expect(some_variable).to be_nil

However, this approach is cumbersome, because I first wait for a test to fail, then add the debugger line, fix the issue and then have to remove the debugger line, whereas I want it work more like gdb which has the ability to kick in when an exception is hit, without requiring to pepper your code base with debugger statements.

Edit: I've tried Plymouth. It hasn't worked reliably enough for me. Also the development history seems to indicate that it isn't a very well supported gem, so I'd rather not rely on it.

Update: I tried out pry-rescue and find it to be neat. However, I use zeus a lot and was wondering if there's a way to make it work with pry-rescue.


Solution

  • Use pry-rescue, it's the spiritual successor to plymouth:

    From the Readme:

    If you're using RSpec or respec, you can open a pry session on every test failure using rescue rspec or rescue respec:

    $ rescue rspec
    From: /home/conrad/0/ruby/pry-rescue/examples/example_spec.rb @ line 9 :
    
         6:
         7: describe "Float" do
         8:   it "should be able to add" do
     =>  9:     (0.1 + 0.2).should == 0.3
        10:   end
        11: end
    
    RSpec::Expectations::ExpectationNotMetError: expected: 0.3
         got: 0.30000000000000004 (using ==)
    [1] pry(main)>