45

2つの期待のいずれかが満たされた場合に成功するようにテストを設定する必要があります。

expect(mySpy.mostRecentCall.args[0]).toEqual(jasmine.any(Number));
expect(mySpy.mostRecentCall.args[0]).toEqual(false);

私はそれがこのように見えることを期待しました:

expect(mySpy.mostRecentCall.args[0]).toEqual(jasmine.any(Number)).or.toEqual(false);

ドキュメントで見逃したものはありますか、それとも自分でマッチャーを作成する必要がありますか?

4

4 に答える 4

68

複数の比較可能な文字列を配列に追加してから、比較します。比較の順序を逆にします。

expect(["New", "In Progress"]).toContain(Status);
于 2017-02-18T16:42:35.210 に答える
19

これは古い質問ですが、誰かがまだ探している場合は、別の答えがあります。

論理OR式を作成してそれを期待するのはどうですか?このような:

var argIsANumber = !isNaN(mySpy.mostRecentCall.args[0]);
var argIsBooleanFalse = (mySpy.mostRecentCall.args[0] === false);

expect( argIsANumber || argIsBooleanFalse ).toBe(true);

このようにして、OR条件を明示的にテスト/期待でき、Jasmineを使用してブール値の一致/不一致をテストする必要があります。ジャスミン1またはジャスミン2で動作します:)

于 2016-05-13T00:48:49.807 に答える
12

注:このソリューションには、Jasminev2.0より前のバージョンの構文が含まれています。現在のカスタムマッチャーの詳細については、https ://jasmine.github.io/2.0/custom_matcher.htmlを参照してください。


Matchers.jsは、単一の「結果修飾子」でのみ機能します- not

core / Spec.js:

jasmine.Spec.prototype.expect = function(actual) {
  var positive = new (this.getMatchersClass_())(this.env, actual, this);
  positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
  return positive;

core / Matchers.js:

jasmine.Matchers = function(env, actual, spec, opt_isNot) {
  ...
  this.isNot = opt_isNot || false;
}
...
jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
  return function() {
    ...
    if (this.isNot) {
      result = !result;
    }
  }
}

したがって、実際に独自のマッチャーを作成する必要があるようです(正しい場合はabeforeまたはitbloc内からthis)。例えば:

this.addMatchers({
   toBeAnyOf: function(expecteds) {
      var result = false;
      for (var i = 0, l = expecteds.length; i < l; i++) {
        if (this.actual === expecteds[i]) {
          result = true;
          break;
        }
      }
      return result;
   }
});
于 2012-11-23T14:09:19.000 に答える
0

比較演算子を最大限に活用するために、expectステートメントから比較を取り出すことができます。

let expectResult = (typeof(await varA) == "number" || typeof(await varA) == "object" );
expect (expectResult).toBe(true);

于 2020-04-08T01:32:06.403 に答える