根据http://chaijs.com/api/bdd/#a,a
/ an
可用于检查变量的类型。
.A(类型)
@param{ String } type
@param{ String } message _optional_
a
和an
断言是可以使用的别名 要么作为语言链,要么断言值的类型。
但是,我无法检查变量是否为整数。给出的例子,例如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测试变量是否为整数?
答案 0 :(得分:23)
有点晚了,但对于来自搜索引擎的人来说,这是另一个解决方案:
var expect = require('chai').expect
expect(foo).to.be.a('number')
expect(foo % 1).to.equal(0)
由于true % 1 === 0
或null % 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)
答案 5 :(得分:0)
另一个[非最佳]解决方案(为什么不呢?!)
const actual = String(val).match(/^\d+$/);
expect(actual).to.be.an('array');
expect(actual).to.have.lengthOf(1);