web-dev-qa-db-ja.com

チャイで「または」を行う方法

Chai.shouldでorテストを行うにはどうすればよいですか?

例えば何かのようなもの

total.should.equal(4).or.equal(5)

または

total.should.equal.any(4,5)

正しい構文は何ですか?ドキュメントに何も見つかりませんでした

31
MonkeyBonkey

Chaiの期待/文書化が必要 を表示すると、このテストを行う方法がいくつかあります。

「and」を使用してチェーンすることはできますが、「or」は使用できないことに注意してください。この機能が必要です。

  1. オブジェクトが真偽テストに合格するかどうかを確認します。

。satisfy(メソッド)

@param{ Function }matcher
@param{ String }message_optional_

Asserts that the target passes a given truth test.

例:

expect(1).to.satisfy(function(num) { return num > 0; });

あなたの場合、「または」条件をテストするには:

yourVariable.should.satisfy(function (num) {
    if ((num === 4) || (num === 5)) {
        return true;
    } else {
        return false;
    }
});
  1. 数値が範囲内にあるかどうかを確認します。

。within(start、finish)

@param{ Number }startlowerbound inclusive
@param{ Number }finishupperbound inclusive
@param{ String }message_optional_

Asserts that the target is within a range.

例:

expect(7).to.be.within(5,10);
22
nyarasha

ターゲットが指定された配列リストのメンバーであることを表明します。ただし、多くの場合、目標は期待値と等しいと断言するのが最善です。

expect(1).to.be.oneOf([1, 2, 3]);
expect(1).to.not.be.oneOf([2, 3, 4]);

https://www.chaijs.com/api/bdd/#method_oneof

11
Esqarrouth

郵便配達員にテストを書くのと同じような問題があります。次のスクリプトを使用して解決しました:

// delete all products, need token with admin role to complete this operation
pm.test("response is ok and should delete all products", function() {
pm.expect(pm.response.code).to.satisfy(function (status) {
       if ((status === 204) || (status === 404)) {
           return true;
       } else {
           return false;
       }
    });
});
1
Ângelo Polotto

Chaiアサーションはエラーをスローするため、try/catch構文を使用できます。

try {
    total.should.equal(4)
} catch (e) {
    total.should.equal(5)
}

より難しいケースの例:

try {
    expect(result).to.have.nested.property('data.' + options.path, null)
} catch (e) {
    expect(result).to.have.property('data', null)
}
1
rapthead