// 简单引用 var obj = { foo: 'bar' } expect(obj).to.have.property('foo') expect(pbj).to.have.property('foo', 'bar') // 深层引用 var deepObj = { green: { tea: 'matcha' }, teas: [ 'Chai', 'matcha', { tea: 'konacha' } ] } expect(deepObj).to.have.deep.property('green.tea', 'matcha') expect(deepObj).to.have.deep.property('teas[1]', 'matcha') expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha')
如果目标是一个数组,还可以直接使用一个或多个数组下标作为name来在嵌套数组中断言deep.property
var arr = [ [ 'chai', 'matcha', 'konacha' ], [ { tea: 'chai' }, { tea: 'matcha' }, { tea: 'konacha' } ] ] expect(arr).to.have.deep.property('[0][1]', 'matcha') expect(arr).to.have.deep.property('[1][2].tea', 'konacha')
此外,property把断言的主语(subject)从原来的对象变为当前属性的值,使得可以在其后进一步衔接其它链式断言(来针对这个属性值进行测试)
expect(obj).to.have.property('foo') .that.is.a('string') expect(deepObj).to.have.property('green') .that.is.an('object') .that.deep.equals({ tea: 'matcha' }) expect(deepObj).to.have.property('teas') .that.is.an('array') .with.deep.property('[2]') .that.deep.equals({ tea: 'konacha' })
注意,只有当设置了deep标记的时候,在property() name中的点(.)和中括号([])才必须使用双反斜杠\进行转义(为什么是双反斜杠,在前文有提及),当没有设置deep标记的时候,是不能进行转义的
// 简单指向 var css = { '.link[target]': 42 } expect(css).to.have.property('.link[target]', 42) //深度指向 var deepCss = { 'link': { '[target]': 42 } } expect(deepCss).to.have.deep.property('\\.link\\.[target]', 42)
.ownProperty(name)
name:String,属性名
断言目标拥有名为name的自有属性
expect('test').to.have.ownProperty('length')
.ownPropertyDescription(name[, descriptor])
- name:String,属性名
- descriptor: Object,描述对象,可选
断言目标的某个自有属性存在描述符对象,如果给定了descroptor描述符对象,则该属性的描述符对象必须与其相匹配
expect('test').to.have.ownPropertyDescriptor('length') expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configrable: false, writeable: false, value: 4 }) expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writeable: false, value: 3 }) // 将断言的主语改为了属性描述符对象 expect('test').to.have.ownPropertyDescriptor('length') .to.have.property('enumerable', false) expect('test').to.have.ownPropertyDescriptor('length') .to.have.keys('value')
内容版权声明:除非注明,否则皆为本站原创文章。