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');
});

should.equal(testedValue, undefined);

как указано в документации chai


(typeof scope.play(10)).should.equal('undefined');

тест для 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');

не уверен, если это правильный путь, но он работает.

согласно сообщению от призрака в github


попробуйте это:

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.игры(10)).следует.быть.неопределено;


вы можете обернуть результат своей функции в should() и тест для типа "undefined":

it ('cannot play outside the board', function() {
  should(scope.play(10)).be.type('undefined');
});

не забывайте о сочетании have и not ключевые слова:

const chai = require('chai');
chai.should();
// ...
userData.should.not.have.property('passwordHash');