Must.js, объединяющий несколько утверждений в одно свойство
У меня есть такой объект:
var obj = {
"uuid": "60afc3fa-920d-11e5-bd17-b9db323e7d51",
"type": "candy"
}
Я хочу написать тест, который сначала проверяет, что объект имеет свойство 'uuid' в первую очередь, а затем это 'uuid' определенной длины (36 символов).
Попытка этого не работает
obj.should.have.property('uuid').which.should.have.length(36)
Это терпит неудачу с:
Uncaught AssertionError: expected Assertion {
obj: '60afc3fa-920d-11e5-bd17-b9db323e7d51',
params: { operator: 'to have property \'uuid\'' },
negate: false } to have property 'length' of 36 (got [Function])
И это (что на самом деле не имеет синтаксического смысла в любом случае - так как это применимо к родительскому объекту, а не к значению)
obj.should.have.property('uuid').and.be.length(36)
Который терпит неудачу с:
Uncaught TypeError: usergridResponse.entity.should.have.property(...).which.should.be.equal.to is not a function
Даже это не работает:
obj.should.have.property('uuid').which.equals('60afc3fa-920d-11e5-bd17-b9db323e7d51')
Итак, как правильно связать утверждения относительно свойства объекта?
2 ответа
Я думаю, что это может быть лучшим вариантом:
var session = {
"uuid": "60afc3fa-920d-11e5-bd17-b9db323e7d51",
"type": "candy"
};
session.should.have.property('uuid').with.a.lengthOf(36);
Или это, если вы хотите выбрать should
дважды, но я не думаю, что это правильный путь (объяснено ниже).
var session = {
"uuid": "60afc3fa-920d-11e5-bd17-b9db323e7d51",
"type": "candy"
};
session.should.have.property('uuid').which.obj.should.have.length(36);
Вы можете видеть их работу здесь:
https://jsfiddle.net/Lz2zsoks/
.an
, .of
, .a
, .and
, .be
, .have
, .with
, .is
, .which
просто цепные цепи, которые ничего не делают.
Обновить
В ответ на @denbardadym я постараюсь объяснить, почему вы не должны использовать should
дважды:
- Вы не будете использовать его дважды на естественном языке, поэтому лучше не использовать его в тестах
- Should.js не предназначен для использования таким образом. Вы не найдете ни одного примера такого использования в документации библиотеки.
Первое утверждение не удалось, потому что вы звоните .should
дважды - второй раз, когда вы утверждаете на утверждение, это должно быть:
obj.should.have.property('uuid').which.have.length(36)
(сообщение об ошибке буквально говорит, что Assertion {...}
не имеет длины свойства)
Второе утверждение не бросает для меня:
obj.should.have.property('uuid').and.be.length(36)
(ваше сообщение об ошибке выглядит так, будто это утверждение не для вас)
Последнее утверждение - нет .equals
утверждение - должно быть .equal
, И это повода для меня, потому что "0320a79a-920d-11e5-9b7a-057d4ca344ba" !== "60afc3fa-920d-11e5-bd17-b9db323e7d51"
Надеюсь, поможет.