Chai检查数组是否包含包含键的对象

时间:2017-10-27 14:27:36

标签: mocha chai

我在与Chai进行集成测试时遇到了问题。我想检查一个数组包含一个包含一些键的对象。在这种情况下,我正在向用户添加一个地址,我希望检查当返回用户时,addresses数组包含我最初传递的字段,但不检查MongoDB生成的ObjectId。我一直在使用chai things进行数组操作。

当我知道我正在检查的元素是以下面的断言形式在索引0时,我有一个有效的解决方案:

expect(response.body.addresses[0]).to.deep.include({
                text: '123, fake street',
                loc: {
                    type: 'Point',
                    coordinates: [0, 0]
                }
});

我想要的是利用chai-things断言数组包含一个满足上述断言相同要求的对象。我能提出的最接近的解决方案是:

expect(response.body.addresses).to.contain.something.that.deep.includes({
                  text: '123, fake street',
                  loc: {
                      type: 'Point',
                      coordinates: [0, 0]
                  }
});

但这失败了:AssertionError: expected { Object (text, _id, ...) } to deep include { text: '123, fake street', loc: { type: 'Point', coordinates: [ 0, 0 ] } }

有没有办法实现这一点而不依赖于数组中对象的位置?

1 个答案:

答案 0 :(得分:0)

我也尝试过使用chai-things而且无法正确使用。使用chai-subset

结束

在您的测试设置中:

chai.use(require('chai-subset'))

并在测试中

expect(response.body.addresses).to.containSubset([{
  text: '123, fake street',
  loc: {
    type: 'Point',
    coordinates: [0, 0]
  }
}])