I have a mocha test using chai's expect:
it("should parse sails out of cache file", async () => {
const sailExtractor = new Extractor();
const result = await sailExtractor.extract("test.xml");
try {
expect(result.length).to.be.greaterThan(0);
const withMandatoryFlight = result.filter((cruises) => {
return cruises.hasMandatoryFlight === true;
});
expect(withMandatoryFlight.length).to.be.greaterThan(0);
const cruiseOnly = result.filter((cruises) => {
return cruises.hasMandatoryFlight === false;
});
expect(cruiseOnly.length).to.be.greaterThan(0);
return Promise.resolve();
} catch (e) {
return Promise.reject(e);
}
}
Now if one to.be.greaterThan(0)
expectation fails, the error output on mocha is not dev-friendly:
AssertionError: expected 0 to be above 0
at Assertion.assertAbove (node_modules/chai/lib/chai/core/assertions.js:571:12)
at Assertion.ctx.(anonymous function) [as greaterThan] (node_modules/chai/lib/chai/utils/addMethod.js:41:25)
at _callee2$ (tests/unit/operator/croisiEurope/CroisXmlExtractorTest.js:409:61)
at tryCatch (node_modules/regenerator-runtime/runtime.js:65:40)
at Generator.invoke [as _invoke] (node_modules/regenerator-runtime/runtime.js:303:22)
at Generator.prototype.(anonymous function) [as next] (node_modules/regenerator-runtime/runtime.js:117:21)
at fulfilled (node_modules/tslib/tslib.js:93:62)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
I would like to replace it with something more human-friendly. Is there a way to tell chai to use a customize error message?
I want to be able to use it like this pseudo-code:
expect(result.length)
.to.be.greaterThan(0)
.withErrorMessage("It should parse at least one sail out of the flatfile, but result is empty");
And then the failing mocha error should print:
AssertionError: It should parse at least one sail out of the flatfile, but result is empty
To write the first unit test using Mocha and Chai, first let's create a simple function named isNumValid which returns true for values in between 10 and 70, and returns false for values greater than or equal to 70 and less than or equal to 10. Now we can write the tests to verify this functions behavior.
Chai is such an assertion library, which provides certain interfaces to implement assertions for any JavaScript-based framework. Chai's interfaces are broadly classified into two: TDD styles and BDD styles.
Every expect
method accepts an optional parameter message
:
expect(1).to.be.above(2, 'nooo why fail??');
expect(1, 'nooo why fail??').to.be.above(2);
So, in your case it should be:
expect(result.length)
.to.be.greaterThan(0, "It should parse at least one sail out of the flatfile, but result is empty");
If you use should
for your assertions you can pass a string to the test function which will be written out if the condition fails. For example:
result.length.should.be.above(0, "It should parse at least one sail out of the flatfile, but result is empty");
I'm not sure if this is possible with expect. The API doesn't seem to mention it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With