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を使用して、整数を超えている変数をテストするにはどうすればよいですか?
JavaScriptには、別個のinteger
タイプはありません。
すべてが IEEE 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
などの理由により、番号チェックが必要です。
これも可能です(少なくともノード間):
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);
});
});
あなたが実行しているブラウザ/コンテキストによっては、いくつかの役に立つであろうNumberからハングアップする関数もあります。
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);