Ответ 1
JavaScript не имеет отдельного типа integer
.
Все является номером с плавающей точкой IEE 754, который будет иметь тип number
.
В соответствии с http://chaijs.com/api/bdd/#a, a
/an
может использоваться для проверки типа переменной.
.a(тип)
@param{ String } type
@param{ String } message _optional_
Утверждения
a
иan
- это псевдонимы, которые можно использовать либо в качестве языковых цепей, либо для утверждения типа значения.
Однако я не могу проверить переменную beeing целое число. Данные примеры, например. 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 для переменной beeing целое число?
JavaScript не имеет отдельного типа integer
.
Все является номером с плавающей точкой IEE 754, который будет иметь тип number
.
Немного поздно, но для людей, которые приходят из поисковых систем, вот еще одно решение:
var expect = require('chai').expect
expect(foo).to.be.a('number')
expect(foo % 1).to.equal(0)
Проверка номера требуется из-за таких вещей, как true % 1 === 0
или null % 1 === 0
.
Это также возможно (по крайней мере, в node):
expect(42).to.satisfy(Number.isInteger);
Вот более продвинутый пример:
expect({NUM: 1}).to.have.property('NUM').which.is.a('number').above(0).and.satisfy(Number.isInteger);
Я чувствую вашу боль, вот что я придумал:
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);
});
});
В зависимости от браузера/контекста, в котором вы работаете, есть функция, зависающая от номера, который будет использоваться.
var value = 42;
Number.isInteger(value).should.be.true;
Он не был принят повсеместно, но большинство мест, которые имеют значение (Chrome, FFox, Opera, Node)
Другое [не оптимальное] решение (почему бы и нет?!)
const actual = String(val).match(/^\d+$/);
expect(actual).to.be.an('array');
expect(actual).to.have.lengthOf(1);