chai-by-proxy

Getting started

$ npm install --save-dev chai-by-proxy

node < 6

$ npm install --save-dev harmony-reflect

$ echo "--harmony_proxies"         >> test/mocha.opts
$ echo "--require harmony-reflect" >> test/mocha.opts

node 0.10

$ echo "--harmony_collections" >> test/mocha.opts

Usage

var chai = require('chai')
chai.use(require('chai-by-proxy'))

have/has (starts a chain)

obj = { foo: { bar: 'baz' } })

obj.should.have.foo.bar.eq('baz')
// same as
obj.should.have.property('foo').property('bar').eq('baz')

chai’s properties are prior to your object’s

obj = { a: { property: '' } }
// you can't do
obj.should.have.a.property
// instead, fallback to old style
obj.should.have.deep.property('a.property')

and (goes back to the last have/has)

obj = { foo: { bar: '' },
        baz: { qux: 11 } }

obj.should.have.foo.bar.with.a('string')
           .and.baz.qux.eq(11)

without (negates)

obj = { foo: {} }

obj.should.have.foo.without.bar

= (equals)

obj = { foo: { bar: 'baz' } }

obj.should.have.foo.bar= 'baz'

not= (not.equals)

obj = { foo: { bar: 'baz' } }

obj.should.have.foo.bar.not= 'qux'

long live the chain

response =
  status: 200
  body:
    data:
      count: 1
      items: [
        { name: 'party pooper' }
      ]

response.should.have.status.which.eq(200)
                .and.body.without.error
                .and.body.data.has.count.above(0)
                              .and.items[0].name= 'party pooper'