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

soe*_*ace 21 javascript unit-testing mocha.js node.js chai

http://chaijs.com/api/bdd/#a,a/ an可用于检查一个变量的类型.

.一种)

@param{ String } type

@param{ String } message _optional_

aan断言是可以用来作为语言链或断言值的类型的别名.

但是,我无法检查变量是否为整数.给出的例子,例如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');
Run Code Online (Sandbox Code Playgroud)

运行mocha时,所有这些都给我以下错误:

Uncaught AssertionError: expected 42 to be an integer
Run Code Online (Sandbox Code Playgroud)

如何用chai测试变量是否为整数?

tle*_*leb 32

有点晚了,但对于来自搜索引擎的人来说,这是另一个解决方案:

var expect = require('chai').expect

expect(foo).to.be.a('number')
expect(foo % 1).to.equal(0)
Run Code Online (Sandbox Code Playgroud)

由于诸如true % 1 === 0或之类的事情,需要进行号码检查null % 1 === 0.


Jer*_*her 18

JavaScript没有单独的integer类型.

一切都是IEE 754浮点数,它的类型number.


小智 10

这也是可能的(至少在节点上):

expect(42).to.satisfy(Number.isInteger);
Run Code Online (Sandbox Code Playgroud)

这是一个更高级的例子:

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


Bra*_*eer 5

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

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);
    });
});
Run Code Online (Sandbox Code Playgroud)