柴单位测试 - 期待(42).to.be.an('整数n#39;)

时间:2014-05-11 20:20:25

标签: javascript node.js unit-testing mocha chai

根据http://chaijs.com/api/bdd/#aa / an可用于检查变量的类型。

  

.A(类型)

     

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

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

Uncaught AssertionError: expected 42 to be an integer

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

6 个答案:

答案 0 :(得分:23)

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

var expect = require('chai').expect

expect(foo).to.be.a('number')
expect(foo % 1).to.equal(0)

由于true % 1 === 0null % 1 === 0等内容需要进行数字检查。

答案 1 :(得分:16)

JavaScript没有单独的integer类型。

所有内容都是IEE 754 floating point number,其类型为number

答案 2 :(得分:8)

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

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

这是一个更高级的例子:

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:3)

根据您正在运行的浏览器/上下文,还有一个悬挂在Number上的功能,可以使用。

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

它并未在所有地方采用,但大多数重要的地方(Chrome,FFox,Opera,Node)

More Info here

答案 5 :(得分:0)

另一个[非最佳]解决方案(为什么不呢?!)

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