Chai unittesting – expect(42).to.be.an('integer')

根据http://chaijs.com/api/bdd/#a ,可以使用a / an来检查variables的types。

。一种)

@param{ String } type

@param{ String } message _optional_

aan断言是可以用作语言链或声明一个值types的别名。

但是,我无法检查variablesbeeing整数。 给定的例子,例如expect('1337').to.be.a('string'); 为我工作,但以下不:

 expect(42).to.be.an('integer'); expect(42).to.be.an('Integer'); expect(42).to.be.an('int'); expect(42).to.be.an('Int'); 

运行摩卡时,他们都给我以下错误:

 Uncaught AssertionError: expected 42 to be an integer 

我如何用chai来testing一个整数的variables?

JavaScript没有单独的integertypes。

一切都是一个IEE 754浮点数 ,这将是typesnumber

有点晚了,但对于来自search引擎的人来说,这是另一个解决scheme:

 var expect = require('chai').expect expect(foo).to.be.a('number') expect(foo % 1).to.be.equal(0) 

因为诸如true % 1 === 0null % 1 === 0之类的东西,所以需要进行数字检查。

我感到你的痛苦,这就是我想到的:

 var assert = require('chai').assert; describe('Something', function() { it('should be an integer', function() { var result = iShouldReturnInt(); assert.isNumber(result); var isInt = result % 1 === 0; assert(isInt, 'not an integer:' + result); }); }); 

根据您正在运行的浏览器/上下文,还有一个挂起Number的函数可能会有用处。

 var value = 42; Number.isInteger(value).should.be.true; 

到处都没有采用,但大部分重要的地方(Chrome,FFox,Opera,Node)

更多信息在这里

这也是可能的(至less在节点中):

 expect(42).to.satisfy(Number.isInteger); 

这是一个更高级的例子:

 expect({NUM: 1}).to.have.property('NUM').which.is.a('number').above(0).and.satisfy(Number.isInteger); 

另一个[不是最优]的解决scheme(为什么不呢?!)

 const actual = String(val).match(/^\d+$/); expect(actual).to.be.an('array'); expect(actual).to.have.lengthOf(1);