ert: Interactive Debugging

 
 4.2 Interactive Debugging
 =========================
 
 Debugging failed tests essentially works the same way as debugging any
 other problems with Lisp code.  Here are a few tricks specific to tests:
 
    • Re-run the failed test a few times to see if it fails in the same
      way each time.  It’s good to find out whether the behavior is
      deterministic before spending any time looking for a cause.  In the
      ERT results buffer, ‘r’ re-runs the selected test.
 
    • Use ‘.’ to jump to the source code of the test to find out exactly
      what it does.  Perhaps the test is broken rather than the code
      under test.
 
    • If the test contains a series of ‘should’ forms and you can’t tell
      which one failed, use ‘l’, which shows you the list of all ‘should’
      forms executed during the test before it failed.
 
    • Use ‘b’ to view the backtrace.  You can also use ‘d’ to re-run the
      test with debugging enabled, this will enter the debugger and show
      the backtrace as well; but the top few frames shown there will not
      be relevant to you since they are ERT’s own debugger hook.  ‘b’
      strips them out, so it is more convenient.
 
    • If the test or the code under testing prints messages using
      ‘message’, use ‘m’ to see what messages it printed before it
      failed.  This can be useful to figure out how far it got.
 
    • You can instrument tests for debugging the same way you instrument
      ‘defun’s for debugging: go to the source code of the test and type
      ‘C-u C-M-x’.  Then, go back to the ERT buffer and re-run the test
      with ‘r’ or ‘d’.
 
    • If you have been editing and rearranging tests, it is possible that
      ERT remembers an old test that you have since renamed or removed:
      renamings or removals of definitions in the source code leave
      around a stray definition under the old name in the running process
      (this is a common problem in Lisp).  In such a situation, hit ‘D’
      to let ERT forget about the obsolete test.