34

根据http://chaijs.com/api/bdd/#aa/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');

运行 mocha 时,它们都给了我以下错误:

Uncaught AssertionError: expected 42 to be an integer

如何用 chai 测试一个整数的变量?

4

6 回答 6

47

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

var expect = require('chai').expect

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

由于true % 1 === 0或等原因,需要进行号码检查null % 1 === 0

于 2016-03-04T08:15:51.977 回答
26

JavaScript 没有单独的integer类型。

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

于 2014-05-11T20:36:58.773 回答
13

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

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

这是一个更高级的示例:

expect({NUM: 1}).to.have.property('NUM').which.is.a('number').above(0).and.satisfy(Number.isInteger);
于 2017-04-12T08:48:23.293 回答
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);
    });
});
于 2014-06-20T14:17:00.167 回答
3

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

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

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

更多信息在这里

于 2016-05-26T19:37:36.707 回答
0

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

const actual = String(val).match(/^\d+$/);
expect(actual).to.be.an('array');
expect(actual).to.have.lengthOf(1);
于 2017-07-17T15:10:55.630 回答