Chai:如何使用'should'语法测试undefined

时间:2013-10-06 13:02:20

标签: javascript angularjs testing chai

在使用chai测试angularjs app的this教程的基础上,我想使用“should”样式为未定义的值添加测试。这失败了:

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

错误“TypeError:无法读取属性'应该'未定义',但测试通过了”expect“样式:

it ('cannot play outside the board', function() {
  chai.expect(scope.play(10)).to.be.undefined;
});

我怎样才能使用“should”?

9 个答案:

答案 0 :(得分:74)

这是should语法的缺点之一。它的工作原理是将should属性添加到所有对象,但如果未定义返回值或变量值,则没有对象来保存属性。

documentation提供了一些解决方法,例如:

var should = require('chai').should();
db.get(1234, function (err, doc) {
  should.not.exist(err);
  should.exist(doc);
  doc.should.be.an('object');
});

答案 1 :(得分:44)

should.equal(testedValue, undefined);

如chai文档中所述

答案 2 :(得分:17)

测试未定义的

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;

答案 3 :(得分:16)

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

答案 4 :(得分:7)

我努力为未定义的测试编写should语句。以下不起作用。

target.should.be.undefined();

我找到了以下解决方案。

(target === undefined).should.be.true()

如果还可以将其写为类型检查

(typeof target).should.be.equal('undefined');

不确定上述是否正确,但确实有效。

According to Post from ghost in github

答案 5 :(得分:5)

试试这个:

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

答案 6 :(得分:1)

@ david-norman的回答是正确的,根据文档,我有一些设置问题,而是选择了以下。

(typeof scope.play(10))。should.be.undefined;

答案 7 :(得分:1)

不要忘记havenot关键字的组合:

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

答案 8 :(得分:0)

您可以将函数结果包装在should()中并测试“undefined”类型:

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