Chai: как проверить неопределенность с синтаксисом' should'
дом на этой учебник тестирование приложения angularjs с chai, я хочу добавить тест для неопределенного значения, используя стиль "должен". Это не удается:
it ('cannot play outside the board', function() {
scope.play(10).should.be.undefined;
});
с ошибкой "TypeError: не удается прочитать свойство 'should' из undefined", но тест проходит со стилем" expect":
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
Как я могу заставить его работать с "должен"?
9 ответов:
Это один из недостатков синтаксиса should. Он работает, добавляя свойство should ко всем объектам, но если возвращаемое значение или значение переменной не определено, нет объекта для хранения свойства.
на документация дает некоторые обходные пути, например:
var should = require('chai').should(); db.get(1234, function (err, doc) { should.not.exist(err); should.exist(doc); doc.should.be.an('object'); });
тест для undefined
var should = require('should'); ... should(scope.play(10)).be.undefined;
тест на null
var should = require('should'); ... should(scope.play(10)).be.null;
тест на ложь, т. е. рассматривается как ложь в условиях
var should = require('should'); ... should(scope.play(10)).not.be.ok;
Я изо всех сил пытался написать заявление should для неопределенных тестов. Следующее не работает.
target.should.be.undefined();
Я нашел следующие решения.
(target === undefined).should.be.true()
если можно также написать его как проверку типа
(typeof target).should.be.equal('undefined');
не уверен, если это правильный путь, но он работает.
попробуйте это:
it ('cannot play outside the board', function() { expect(scope.play(10)).to.be.undefined; // undefined expect(scope.play(10)).to.not.be.undefined; // or not });
ответ @david-norman правильный в соответствии с документацией, у меня было несколько проблем с настройкой и вместо этого выбрал следующее.
(typeof scope. play (10)). should.be. undefined;