function hookErr(_, errSuite, after) {
      // before/after Each hook for errSuite failed:
      var orig = self.suite;

      // for failed 'after each' hook start from errSuite parent,
      // otherwise start from errSuite itself
      self.suite = after ? errSuite.parent : errSuite;

      if (self.suite) {
        self.hookUp(HOOK_TYPE_AFTER_EACH, function (err2, errSuite2) {
          self.suite = orig;
          // some hooks may fail even now
          if (err2) {
            return hookErr(err2, errSuite2, true);
          }
          // report error suite
          fn(errSuite);
        });
      } else {
        // there is no need calling other 'after each' hooks
        self.suite = orig;
        fn(errSuite);
      }
    }
Run tests in the given `suite` and invoke the callback `fn()` when complete.

@private
@param {Suite} suite
@param {Function} fn