docs: function throws(block, Error, message) {
      var threw = false;
      var exception = null;
  
      // If third argument is not provided and second argument is a string it
      // means that optional `Error` argument was not passed, so we shift
      // arguments.
      if (utils.isString(Error) && utils.isUndefined(message)) {
        message = Error;
        Error = undefined;
      }
  
      // Executing given `block`.
      try {
        block();
      }
      catch (e) {
        threw = true;
        exception = e;
      }
  
      // If exception was thrown and `Error` argument was not passed assert is
      // passed.
      if (threw && (utils.isUndefined(Error) ||
                   // If Error is thrown exception
                   (Error == exception) ||
                   // If passed `Error` is RegExp using it"s test method to
                   // assert thrown exception message.
                   (utils.isRegExp(Error) && Error.test(exception.message)) ||
                   // If passed `Error` is a constructor function testing if
                   // thrown exception is an instance of it.
                   (utils.isFunction(Error) && utils.instanceOf(exception, Error))))
      {
        this.pass(message);
      }
  
      // Otherwise we report assertion failure.
      else {
        var failure = {
          message: message,
          operator: "throws"
        };
  
        if (exception)
          failure.actual = exception;
  
        if (Error)
          failure.expected = Error;
  
        this.fail(failure);
      }
    }