Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do an "or" in chai should

Tags:

chai

How do I do an or test with chai.should?

e.g. something like

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

or

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

What's the right syntax? I couldn't find anything in the documentation.

like image 594
MonkeyBonkey Avatar asked Sep 04 '15 00:09

MonkeyBonkey


3 Answers

Viewing the Chai expect / should documentation, there are several ways to do this test.

Note that you can chain using "and" but apparently not "or" - wish they had this functionality.

  1. Check whether an object passes a truth test:

.satisfy(method)

@param{ Function }matcher @param{ String }message_optional_  Asserts that the target passes a given truth test. 

Example:

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

In your case, to test an "or" condition:

yourVariable.should.satisfy(function (num) {     if ((num === 4) || (num === 5)) {         return true;     } else {         return false;     } }); 
  1. Check whether a number is within a range:

.within(start, finish)

@param{ Number }startlowerbound inclusive @param{ Number }finishupperbound inclusive @param{ String }message_optional_  Asserts that the target is within a range. 

Example:

expect(7).to.be.within(5,10); 
like image 182
nyarasha Avatar answered Sep 28 '22 20:09

nyarasha


Asserts that the target is a member of the given array list. However, it’s often best to assert that the target is equal to its expected value.

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

like image 39
Esqarrouth Avatar answered Sep 28 '22 20:09

Esqarrouth


I have a similar problem to write tests to postman. I solved using the following script:

// 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((status) => status === 204 || status === 404);
});
like image 31
Ângelo Polotto Avatar answered Sep 28 '22 18:09

Ângelo Polotto