Как проверить, содержит ли объект частичный ключ с регулярным выражением, используя chai js?

#javascript #regex #key #chai #contain

#javascript #регулярное выражение #Клавиша #chai #содержать

Вопрос:

Я использую 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');
  

Знаете ли вы способ справиться с этим?

Спасибо за вашу помощь!

Комментарии:

1. Я был бы очень удивлен, если у Chai есть встроенное утверждение для этого, но в его документации говорится о том, как добавить свой собственный. Добавление собственного для вышеупомянутого было бы довольно тривиальным.

2. Я только что нашел документы о создании своих собственных, выглядит интересно, спасибо!

Ответ №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, как только достигнет любого ключа, который заставляет его обратный вызов возвращать истинное значение.

Комментарии:

1. возможно, вы не заметили, но я хотел сделать это с помощью API Chai.