#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.