2015-11-23 4 views
4

У меня есть объект, как это:Should.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') 

Так что правильный путь к цепи утверждений о свойстве объекта?

ответ

3

Я думаю, что это может быть лучшим вариантом:

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 просто chainers, что не делают ничего.

Update

В ответ на @denbardadym я попытаюсь объяснить, почему вы не должны использовать should дважды:

  • Вы не будете использовать его дважды на естественном языке, так что лучше не использовать его в тестах
  • Should.js не предназначен для использования таким способом. Вы не найдете никакого примера этого использования в документации библиотеки.
+0

Неправильный способ предложить использовать .должно в два раза - лучше объяснить, почему это неправильно. –

+0

Хорошо, уже объяснил. Но это также неправильный способ написать ответ, не давая ответа;) – artberri

+0

Также obj не должен быть длиной 36, obj.uuid должен быть – brandonscript

1

Первое утверждение не удалось, потому что вы называете .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"

Надеюсь, это поможет.

+0

Думаю, я добиваюсь прогресса. Uuid, не совпадающий с копией с моей стороны. '.length', вероятно, потому, что это' .lengthOf' вместо '.length'. Поиграет еще немного. – brandonscript

+0

Это нормально =). Я предлагаю вам для такого вопроса использовать gitter chat для rep.o.s.js, я обычно отвечаю быстрее. –