Search code examples
chai

How to do an "or" in chai should


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.


Solution

  • 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);