web-dev-qa-db-fra.com

comment faire un "ou" dans chai devrait

Comment faire un test or avec chai.should?

par exemple. quelque chose comme

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

ou

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

Quelle est la bonne syntaxe? Je n'ai rien trouvé dans la documentation

31
MonkeyBonkey

Affichage de la documentation Chai attend/devrait , il existe plusieurs façons de faire ce test.

Notez que vous pouvez chaîner en utilisant "et" mais apparemment pas "ou" - j'aurais aimé qu'ils aient cette fonctionnalité.

  1. Vérifiez si un objet passe un test de vérité:

. satisfait (méthode)

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

Asserts that the target passes a given truth test.

Exemple:

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

Dans votre cas, pour tester une condition "ou":

yourVariable.should.satisfy(function (num) {
    if ((num === 4) || (num === 5)) {
        return true;
    } else {
        return false;
    }
});
  1. Vérifiez si un nombre se situe dans une plage:

dans (début, fin)

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

Asserts that the target is within a range.

Exemple:

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

Affirme que la cible est membre de la liste de tableaux donnée. Cependant, il est souvent préférable d'affirmer que l'objectif est égal à sa valeur attendue.

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

J'ai un problème similaire pour écrire des tests à Postman. J'ai résolu en utilisant le script suivant:

// 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

Parce que les assertions chai génèrent une erreur, vous pouvez utiliser la construction try/catch:

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

exemple de cas plus difficile:

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