详解Chai.js断言库API中文文档(5)
.length
设置.have.length标记作为比较length属性值的前缀
expect('foo').to.have.length.above(2) expect([1, 2, 3]).to.have.length.within(2, 4)
.lengthOf(value)
value:Number
断言目标的length属性为期望的值
expect([1, 2, 3]).to.have.lengthOf(3) expect('foobar').to.have.lengthOf(6)
.match(regexp)
regexp:RegExp,正则表达式
断言目标匹配到一个正则表达式
expect('foobar').to.match(/^foo/)
.string(string)
string:String,字符串
断言目标字符串包含另一个字符串
expect('foobar').to.have.string('bar')
.keys(key1, [key2], [...])
key:String | Array | Object 属性名
断言目标包含传入的属性名。与any,all,contains或者have前缀结合使用会影响测试结果:
当与any结合使用时,无论是使用have还是使用contains前缀,目标必须至少存在一个传入的属性名才能通过测试。注意,any或者all应当至少使用一个,否则默认为all
当结合all和contains使用时,目标对象必须至少拥有全部传入的属性名,但是它也可以拥有其它属性名
当结合all和have使用时,目标对象必须且仅能拥有全部传入的属性名
// 结合any使用 expect({ foo: 1, bar: 2, baz: 3 }).to.have.any.keys('foo', 'bar') expect({ foo: 1, bar: 2, baz: 3 }).to.contains.any.keys('foo', 'bar') // 结合all使用 expect({ foo: 1, bar: 2, baz: 3 }).to.have.all.keys('foo', 'bar', 'baz') expect({ foo: 1, bar: 2, baz: 3 }).to.contains.all.keys('foo', 'bar') // 传入string expect({ foo: 1, bar: 2, baz: 3 }).to.have.any.keys('foo') // 传入Array expect({ foo: 1, bar: 2, baz: 3 }).to.have.all.keys(['foo', 'bar', 'baz']) // 传入Object expect({ foo: 1, bar: 2, baz: 3 }).to.have.any.keys({ bar: 2, foo: 1 })
.throw(constructor)
constructor: ErrorConstroctor | String | RegExp
断言目标函数会抛出一个指定错误或错误类型(使用instanceOf计算),也可使用正则表达式或者字符串来检测错误消息
var err = new RefernceError('this is a bad function') var fn = function () { throw err } expect(fn).to.throw(ReferenceError) expect(fn).to.throw(Error) expect(fn).to.throw(/bad function/) expect(fn).to.not.throw('good function') expect(fn).to.throw(ReferrenceError, /bad function/) expect(fn).to.throw(err)
注意,当一个抛错断言被否定了(前面有.not),那么它会从Error构造函数开始依次检查各个可能传入的参数。检查一个只是消息类型不匹配但是已知的错误,合理的方式是先断言该错误存在,然后使用.and后断言错误消息不匹配