Chai:如何用'should'语法来testingundefined

在本教程的基础上testing一个带有chai的angularjs应用程序,我想使用“should”风格为未定义的值添加一个testing。 这失败了:

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

与错误“types错误:不能读属性'应该'未定义”,但testing通过与“期望”风格:

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

我怎样才能使它与“应该”?

这是should语法的缺点之一。 它通过将should属性添加到所有对象来工作,但是如果返回值或variables值未定义,则不存在用于保存该属性的对象。

该文档提供了一些解决方法,例如:

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

正如柴文献中提到的那样

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

testing未定义的

 var should = require('should'); ... should(scope.play(10)).be.undefined; 

testingnull

 var should = require('should'); ... should(scope.play(10)).be.null; 

testing虚假,即在条件下视为虚假

 var should = require('should'); ... should(scope.play(10)).not.be.ok; 

我努力为undefinedtesting编写should语句。 以下不起作用。

 target.should.be.undefined(); 

我find了以下解决scheme。

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

如果还可以把它写成types检查

 (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的答案根据文档是正确的,我有一些安装问题,而是select了以下内容。

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

你可以将你的函数结果包装在should()并testing一个“undefined”types:

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