code: function assertWith() {
      new Assertion(this._obj).to.be.spy;
      var expArgs = [].slice.call(arguments, 0)
        , spy = this._obj.__spy
        , calls = spy.calls
        , always = _.flag(this, 'spy always')
        , nthCall = _.flag(this, 'spy nth call with');
  
      if (always) {
        var passed = numberOfCallsWith(spy, expArgs);
        this.assert(
            passed === calls.length
          , 'expected ' + this._obj + ' to have been always called with #{exp} but got ' + passed + ' out of ' + calls.length
          , 'expected ' + this._obj + ' to have not always been called with #{exp}'
          , expArgs
        );
      } else if (nthCall) {
        var ordinalNumber = generateOrdinalNumber(nthCall),
            actArgs = calls[nthCall - 1];
        new Assertion(this._obj).to.be.have.been.called.min(nthCall);
        this.assert(
            nthCallWith(spy, nthCall - 1, expArgs)
          , 'expected ' + this._obj + ' to have been called at the ' + ordinalNumber + ' time with #{exp} but got #{act}'
          , 'expected ' + this._obj + ' to have not been called at the ' + ordinalNumber + ' time with #{exp}'
          , expArgs
          , actArgs
        );
      } else {
        var passed = numberOfCallsWith(spy, expArgs);
        this.assert(
            passed > 0
          , 'expected ' + this._obj + ' to have been called with #{exp}'
          , 'expected ' + this._obj + ' to have not been called with #{exp} but got ' + passed + ' times'
          , expArgs
        );
      }
    }
docs: ### .with