web-dev-qa-db-ja.com

チャイのユニットテスト-expect(42).to.be.an( 'integer')

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を使用して、整数を超えている変数をテストするにはどうすればよいですか?

23
soerface

JavaScriptには、別個のintegerタイプはありません。

すべてが IEEE 754浮動小数点数 で、タイプはnumberです。

20

少し遅いですが、検索エンジンから来ている人のために、ここに別の解決策があります:

var expect = require('chai').expect

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

true % 1 === 0null % 1 === 0などの理由により、番号チェックが必要です。

34
tleb

これも可能です(少なくともノード間):

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

次に、より高度な例を示します。

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

私はあなたの痛みを感じます、これは私が思いついたものです:

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

あなたが実行しているブラウザ/コンテキストによっては、いくつかの役に立つであろうNumberからハングアップする関数もあります。

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

どこでも採用されているわけではありませんが、重要な場所のほとんど(Chrome、FFox、Opera、Node)

詳細はこちら

3
Bob_Gneu

別の[最適ではない]ソリューション(なぜでしょうか?)

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