【问题标题】:How to check if an object contains a partial key with a regex using chai js?如何使用 chai js 检查对象是否包含带有正则表达式的部分键?
【发布时间】:2017-02-08 18:20:31
【问题描述】:

我正在使用 Chai.js,并且正在尝试检查对象是否包含部分键。让我解释一下:

我有这个对象要测试:

var obj = {
    "one/two/three": "value"
}

我想使用 Chai.js 检查对象 obj 是否包含部分键 "one",该键包含在键 "one/two/three" 中。

我在这里检查是否包含密钥:

({ foo: 1, bar: 2 }).should.have.keys('bar');
({ foo: 1, bar: 2, baz: 3 }).should.include.keys('foo');
({ foo: 1, bar: 2, baz: 3 }).should.contain.keys('baz');

这里我检查一个字符串是否包含子字符串:

'foobar'.should.match(/^foo/)

然后,我想将两者合并成这样:

({ foo: 1, bar: 2, baz: 3 }).should.contain.keys.which.match('fo');

你知道处理这个问题的方法吗?

感谢您的帮助!

【问题讨论】:

  • 如果 Chai 对此有一个内置断言,我会感到非常惊讶,但它的文档确实谈到了如何添加你自己的断言。为上述内容添加您自己的内容相当简单。
  • 我刚刚找到了关于创建我自己的文档,看起来很有趣,谢谢!

标签: javascript regex key chai contain


【解决方案1】:

我能想到的最简单的方法是遍历对象的键并检查它们是否与正则表达式匹配。

Object.keys({ foo: 1, bar: 2, baz: 3 }).some(function(key) {
    if (key.match(/^foo/) != null) {
        return true;
    }
    return false;
});

然后您可以将其包装在一些 chai 代码中以获得所需的结果,如下所示:

expect(Object.keys({ foo: 1, bar: 2, baz: 3 }).some(function(key) {
    if (key.match(/^foo/) != null) {
        return true;
    }
    return false;
})).to.equal(true);

如果您不熟悉 Array.some,它会在到达任何导致其回调返回真值的键时立即返回 true。

【讨论】:

  • 你可能没有注意到,但我想用 Chai 的 API 来做这个。
猜你喜欢
  • 1970-01-01
  • 2021-01-06
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
相关资源
最近更新 更多