Основываясь на этом руководстве, тестирующем приложение angularjs с помощью chai, я хочу добавить тест на неопределенное значение, используя стиль «следует». Это не удается:
it ('cannot play outside the board', function() {
scope.play(10).should.be.undefined;
});
с ошибкой «TypeError: невозможно прочитать свойство 'should' of undefined», но тест проходит со стилем «ожидать»:
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
Как я могу заставить его работать с "должен"?
javascript
angularjs
testing
chai
Бенедикт
источник
источник
assert.isUndefined(scope.play(10))
Ответы:
Это один из недостатков синтаксиса should. Он работает, добавляя свойство should ко всем объектам, но если возвращаемое значение или значение переменной не определено, объект для хранения свойства отсутствует.
В документации есть обходные пути, например:
источник
should.not.exist
проверит, соответствует ли значениеnull
этому ответу. @daniel есть ответ ниже:should.equal(testedValue, undefined);
. Это должен быть принятый ответ.как указано в документации chai
источник
.equal()
. Я могу понять, почему @OurManInBananas попросил объяснений. Неожиданное использование should в качестве функции, принимающей два аргумента, вместо ожидаемой формы связанного метода, принимающей один аргумент для ожидаемого значения. Вы можете достичь этого только путем импорта / запроса и назначения вызванной версии,.should()
как описано в принятом ответе @DavidNorman и в этой документации ..equal
синтаксис дает гораздо лучшие сообщения об ошибках, потому что он позволяет вам выводить сообщения, которые болееТест на неопределенное
Проверить на нуль
Проверка на ложность, т.е. считается ложной в условиях
источник
источник
Я изо всех сил пытался написать оператор should для неопределенных тестов. Следующее не работает.
Я нашел следующие решения.
если также можно написать как проверку типа
Не уверен, что это правильный способ, но он работает.
Согласно сообщению от ghost в github
источник
Попробуй это:
источник
Ответ @ david-norman правильный в соответствии с документацией, у меня было несколько проблем с настройкой, и вместо этого я выбрал следующее.
(typeof scope.play (10)). should.be.undefined;
источник
typeof
оператор возвращает строку ; так что это утверждение не могло быть принято; cuz'undefined' !== undefined
Не забывайте о комбинации
have
иnot
ключевых слов:источник
Вы можете обернуть результат своей функции
should()
и протестировать тип "undefined":источник