web-dev-qa-db-ja.com

ジャスミンで値が「以上」であることをテストするにはどうすればよいですか?

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

describe('percent',function(){  

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

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

  });

});

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

82
Bryce Johnson

最初に比較演算を実行してから、それが真実かどうかを確認するだけです。

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

    var percent = insights.percent;

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

  });   
});
66
Bryce Johnson

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

  • toBeGreaterThanOrEqual
  • toBeLessThanOrEqual

以下のアドバイスよりもこれらの関数を使用する必要があります。

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


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

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

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

97
Andrew

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

expect(myVariable).toBeGreaterThan(0);
11
DrMcCleod

これはやや絞め切れないが、基本的な機能ではない

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

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()の前にmatcherを追加する呼び出しを追加します。 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
JonnyRaa

私はこれに遅れていますが、誰かがまだこの質問にアクセスして答えを探している場合に投稿します、私はジャスミンバージョン3.0を使用しています。@ Patrizio Rulloが述べたように、あなたは 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);
5
Rohit

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

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

しかし、どのリリースになるかはわかりません。しばらくの間、ローカルのJasmineコピーで私のコミットのコードを使用してみてください。

4
Patrizio Rullo

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

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

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
hashchange

このJasmineプラグを使用することをお勧めします。 https://github.com/JamieMason/Jasmine-Matchers

1
Broda Noel

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

leastのエイリアスはgte(以上)です。逆に、lte(以下)を使用して、反対をチェックすることもできます。

したがって、質問に答えるために、次のことができます。

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

1