ジャスミンで値が「以上」であることをどのようにテストできますか?


94

数がゼロ以上でなければならないので、私は、値は、小数点(または0)であることを確認したい 1未満です。

describe('percent',function(){  

  it('should be a decimal', function() {

    var percent = insights.percent; 
    expect(percent).toBeGreaterThan(0);
    expect(percent).toBeLessThan(1);

  });

});

「> = 0」を模倣するにはどうすればよいですか?



3
試してみてくださいexpect(percent).not.toBeLessThan(0);
jcubic 2016

2
以下の回答で@Patrizio Rulloが言及しているように、彼のマッチャーはマージされました。現在、ジャスミン2.6で利用可能なtoBeGreaterThanOrEqualマッチャーがあります:jasmine.github.io/api/2.6/matchers.html#toBeGreaterThanOrEqual
Chris Parton

回答:


108

Jasmineの新しいバージョンでAPIが変更されたため、これを更新する必要があると考えました。Jasmine APIには、次の機能が組み込まれています。

  • toBeGreaterThanOrEqual
  • toBeLessThanOrEqual

以下のアドバイスに優先して、これらの関数を使用する必要があります。

Jasmine matchers APIの詳細については、ここをクリックしてください


これは古くて解決された質問であることは知っていますが、かなりきちんとした解決策が見落とされていることに気付きました。「以上」は「より小」関数の逆なので、次を試してください。

expect(percent).not.toBeLessThan(0);

このアプローチでは、パーセントの値を非同期関数で返し、制御フローの一部として処理できます。


4
これは受け入れられるべき答えです。また:expect(2 + 2).not.toBe(5)expect(2 + 2).toBeGreaterThan(0)expect(2 + 2).toBeLessThan(5)
セルゲイPanfilov

expect(NaN).not.toBeLessThan(0);失敗する代わりに合格するため、これは危険です。(not.toBeLessThanそれpercentが数値であると想定している場合は逆のみです。それ以外の場合は逆ではありません。)
Kristian Hanekamp

@percentの値が数値(NaN)でない場合にも期待値が渡されるため、@ KristianHanekampで正確に指摘されているとおり、期待値は信頼できません。
Rohit

69

まず比較操作を実行し、それが真実かどうかを確認するだけです。

describe('percent',function(){
  it('should be a decimal',function(){

    var percent = insights.percent;

    expect(percent >= 0).toBeTruthy();
    expect(percent).toBeLessThan(1);

  });   
});

9
これは機能しますが、残念ながら、 "> ="テストの失敗によって生成されるメッセージは、特に表現力がありません(「真実であると予想される偽」)。ちなみに、テストを非同期にする必要はありません(わかりました。
hashchange、2015

2
以下のようなプラグインで@hashchange jasmine2カスタムメッセージ、エラーメッセージをカスタマイズすることができる:since('expected percent to be greater than or equal to zero').expect(percent >= 0).toBeTruthy();
TachyonVortex

@TachyonVortex面白いですね!そのことは知りませんでした。のような一般的な比較>=では、テストを整理するためにカスタムマッチャーを使用します(実行するのに十分なほど簡単です。以下の私の回答を参照してください)。正しいこと。ありがとう!
hashchange

expect(percent).toBeGreaterThan(-1);xD については試してみませんでした
Cyril CHAPON

15

Jasmineの現在のバージョンは、toBeGreaterThanおよびtoBeLessThanをサポートしています。

expect(myVariable).toBeGreaterThan(0);

1
「以上」という質問
stealththeninja '19

5

これは基本的な機能ではありません。

次のようなカスタムマッチャーを追加できます。

JasmineExtensions.js

yourGlobal.addExtraMatchers = function () {
    var addMatcher = function (name, func) {
        func.name = name;
        jasmine.matchers[name] = func;
    };

    addMatcher("toBeGreaterThanOrEqualTo", function () {
                   return {
                       compare: function (actual, expected) {
                           return {
                               pass: actual >= expected
                           };
                       }
                   };
               }
    );
};

実際には、マッチャーのコンストラクターを定義しています。これはマッチャーオブジェクトを返す関数です。

「ブート」する前にそれを含めてください。基本的なマッチャーはブート時にロードされます。

htmlファイルは次のようになります。

<!-- jasmine test framework-->
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>

<!-- custom matchers -->
<script type="text/javascript" src="Tests/JasmineExtensions.js"></script>
<!-- initialisation-->
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>

次に、boot.jsに呼び出しを追加して、jasmineが定義された後、jasmine.getEnv()の前にマッチャーを追加します。Get envは実際には(少し誤解を招くような名前の)セットアップ呼び出しです。

マッチャーは、EnvコンストラクターのsetupCoreMatchersの呼び出しでセットアップを取得します。

/**
 * ## Require &amp; Instantiate
 *
 * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.
 */
window.jasmine = jasmineRequire.core(jasmineRequire);
yourGlobal.addExtraMatchers();

/**
 * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.
 */
jasmineRequire.html(jasmine);

/**
 * Create the Jasmine environment. This is used to run all specs in a project.
 */
var env = jasmine.getEnv();

サンプルテストにカスタムマッチャーを追加する別の方法を示していますが、機能する方法は、を使用するすべてのテストの前にマッチャーを再作成することbeforeEachです。それはかなり恐ろしいようですので、代わりにこのアプローチで行くと思いました。


5

私はこれに遅れていますが、誰かがまだこの質問にアクセスして回答を探している場合に備えて投稿します。私はJasmineバージョン3.0を使用しており、@ Patrizio Rulloによって言及されているように、toBeGreaterThanOrEqual / toBeLessThanOrEqualを使用できます。

リリースノートのようにバージョン2.5で追加されました-https://github.com/jasmine/jasmine/blob/master/release_notes/2.5.0.md

例えば

expect(percent).toBeGreaterThanOrEqual(1,"This is optional expect failure message");

または

expect(percent).toBeGreaterThanOrEqual(1);

ジャスミンバージョン> 2.3.4ではスペックを順番に実行しないと思います。そのため、仕様を順番に並べたい場合はカスタムマッチャーを作成できますが、順序付けされていない仕様でも問題ない場合は、上記のバージョンを選択できます。
TraxX

4

今日同じ問題に遭遇しましたが、結局のところ、カスタムマッチャーを追加することはそれほど難しくありません。カスタムマッチャーの主な利点は、テストが失敗したときに意味のあるメッセージを返すことができることです。

だからここ2人のマッチャーのためのコードがあり、.toBeAtLeast()かつ.toBeAtMost()、ケースには、誰かを助けます。

beforeEach( function () {

  // When beforeEach is called outside of a `describe` scope, the matchers are
  // available globally. See http://stackoverflow.com/a/11942151/508355

  jasmine.addMatchers( {

    toBeAtLeast: function () {
      return {
        compare: function ( actual, expected ) {
          var result = {};
          result.pass = actual >= expected;
          if ( result.pass ) {
            result.message = "Expected " + actual + " to be less than " + expected;
          } else {
            result.message = "Expected " + actual + " to be at least " + expected;
          }
          return result;
        }
      };
    },

    toBeAtMost: function () {
      return {
        compare: function ( actual, expected ) {
          var result = {};
          result.pass = actual <= expected;
          if ( result.pass ) {
            result.message = "Expected " + actual + " to be greater than " + expected;
          } else {
            result.message = "Expected " + actual + " to be at most " + expected;
          }
          return result;
        }
      };
    }

  } );

} );

4

必要なマッチャーを追加するために、パッチはJasmine GitHubマスターブランチにマージされました。

toBeGreatThanOrEqualおよびtoBeLessThanOrEqualマッチャーを追加する

しかし、それがどのリリースになるかはわかりません。その間、ローカルのJasmineコピーで私のコミットのコードを使用してみることができます。




1

この関数leastを使用して、値が他の値以上かどうかを確認できます。

のエイリアスleastgte(大なりまたは等しい)です。逆の場合も、lte(以下)を使用して反対をチェックできます。

だから、質問に答えるために、あなたは行うことができます:

expect(percent).to.be.gte(0)


どのバージョンのJasmineを使用していますか?2.6.2から2.8にアップグレードしても、エラーが発生TypeError: Cannot read property 'be' of undefinedしますexpect(1).to.be.gte(-1);
Jonathan ParentLévesque17年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.