chai-by-proxy
入门
$ 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
用法
var chai = require('chai')
chai.use(require('chai-by-proxy'))
have/has (开始一个链)
obj = { foo: { bar: 'baz' } })
obj.should.have.foo.bar.eq('baz')
// same as
obj.should.have.property('foo').property('bar').eq('baz')
chai 的属性在你的对象之前
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 (回到最后一个 have/has)
obj = { foo: { bar: '' },
        baz: { qux: 11 } }
obj.should.have.foo.bar.with.a('string')
           .and.baz.qux.eq(11)
without (否定)
obj = { foo: {} }
obj.should.have.foo.without.bar
= (等于)
obj = { foo: { bar: 'baz' } }
obj.should.have.foo.bar= 'baz'
not= (不等于)
obj = { foo: { bar: 'baz' } }
obj.should.have.foo.bar.not= 'qux'
长寿的链
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'