code: function(expr) {
      if (expr) {
        return this;
      }
  
      var params = this.params;
  
      if ("obj" in params && !("actual" in params)) {
        params.actual = params.obj;
      } else if (!("obj" in params) && !("actual" in params)) {
        params.actual = this.obj;
      }
  
      params.stackStartFunction = params.stackStartFunction || this.assert;
      params.negate = this.negate;
  
      params.assertion = this;
  
      if (this.light) {
        throw new LightAssertionError(params);
      } else {
        throw new AssertionError(params);
      }
    }
docs: Base method for assertions.
  
  Before calling this method need to fill Assertion#params object. This method usually called from other assertion methods.
  `Assertion#params` can contain such properties:
  * `operator` - required string containing description of this assertion
  * `obj` - optional replacement for this.obj, it is useful if you prepare more clear object then given
  * `message` - if this property filled with string any others will be ignored and this one used as assertion message
  * `expected` - any object used when you need to assert relation between given object and expected. Like given == expected (== is a relation)
  * `details` - additional string with details to generated message
  
  @memberOf Assertion
  @category assertion
  @param {*} expr Any expression that will be used as a condition for asserting.
  @example
  
  var a = new should.Assertion(42);
  
  a.params = {
  operator: 'to be magic number',
  }
  
  a.assert(false);
  //throws AssertionError: expected 42 to be magic number