在使用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”?
答案 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');
不确定上述是否正确,但确实有效。
答案 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)
不要忘记have
和not
关键字的组合:
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');
});