测试对象是否具有多个属性

时间:2015-07-02 18:38:46

标签: javascript unit-testing testing mocha chai

我无法检查此对象是否需要执行一些操作来链接多个.to.have.property语句?我相信我只是将结果从上一个.to.have.property返回到下一个{。

expect(shopify.formatRequestOptions("shop"))
  .to.have.property('url', "https://"+settings.shop+"/admin/shop.json")
  .to.have.property('method', "GET")
  .to.have.deep.property('headers.X-Shopify-Access-Token', settings.accessToken)

似乎我可以使用像chai-subset这样的东西来检查对象。有没有办法将这些链接在一起?我不想这样做。

var result = shopify.formatRequestOptions("shop")
expect(result).to.have.property('url', "https://"+settings.shop+"/admin/shop.json")
expect(result).to.have.property('method', "GET")
expect(result).to.have.deep.property('headers.X-Shopify-Access-Token', settings.accessToken)

2 个答案:

答案 0 :(得分:2)

可以构建自己的函数,只返回true / false并具有任何界面。

let example = {
  'name': 'thomas'
}

let hasAllProps = (obj, props) => {
  let propsTrue = _.chain(props)
  .map(prop => _.has(obj, prop))
  .without(false)
  .value()
  return (propsTrue.length === props.length)
}

console.log(hasAllProps(example, ['name'])) // true
console.log(hasAllProps(example, ['age'])) // false

答案 1 :(得分:0)

我们可以使用nested.includes

var result = shopify.formatRequestOptions("shop")
expect(result).to.nested.include({
    url: "https://"+settings.shop+"/admin/shop.json"
    method: 'GET',
    'headers.X-Shopify-Access-Token': settings.accessToken // this where nested kicks in, on the dot path
});