Using Chai with TypeScript and Mocha
Posted on Fri 14 August 2015 in TypeScript
Continuing my work on Decorator-drive dependency injection in Typescript I've overhauled the tests by replacing the manual assertions with chai. Chai provides a fluent api for writing descriptive assertions - there are a couple of different flavours, personally I feel the expect
style pairs well with TypeScript as I'm not a fan of extending Object.prototype
.
Installation is straight forward. First install chai
as a dev dependency:
npm install chai --save-dev
Next grab the d.ts
file for chai via tsd
to obtain the type definitions.
tsd install chai --save
You can now start refactoring your test cases; given the following simple mocha test-case:
describe('Calculator', () => {
it('should add two numbers', () => {
const calc : Calculator = new Calculator();
// Manual assertion.
if (calc.add(5, 3) !== 8) {
throw new Error('expected 5 + 3 to equal 8');
}
});
});
We can leverage chai's expect method to perform the assertion:
import { expect } from 'chai';
describe('Calculator', () => {
it('should add two numbers', () => {
const calc : Calculator = new Calculator();
// Chai assertion.
expect(calc.add(5, 3)).to.equal(8);
});
});
When running the tests, chai will provide a useful error message should the assertion fail:
1 failing
1) Calculator should add two numbers:
AssertionError: expected 6 to equal 8
+ expected - actual
-8
+6
at Context.<anonymous> (test/Calculator.spec.js:26:45)
Check out this pull request which highlights how I integrated chai into the ts-prop-inject project.