While the main Mocha.js website provides useful information, it's fairly verbose (that's really a good thing). Here are several tips to help newcomers understand some of the main features of Mocha.
Running commands before and after tests (i.e. Hooks)
Take advantage of Mocha's before
, beforeEach
, after
and afterEach
hooks to define commands to run for all of our tests. This helps reduce repetitious code.
Write Tests Faster
When writing new functional tests, it may take several tries to get it right. To avoid running the entire test suite for each iteration, use Mocha's only
& skip
test properties to fine tune which tests get run.
Do make sure to remove them before committing your code though.
Async Tests
Due to the nature of some set ups, asyncronous actions are inevitable. To help with this, Mocha provides two ways of writing tests:
Use a 'done' callback
You must request a done
argument from the it
function, and then call it when the test has completed.
it("should track time", function(done) {
var startTime = new Date();
window.setTimeout(function() {
var endTime = new Date();
// this probably won't pass due to the setTimeout resolution not being entirely accurate
// https://www.nczonline.net/blog/2011/12/14/timer-resolution-in-browsers/
expect(endTime - startTime).to.equal(200);
done();
}, 200);
});
Return a Promise
In this example, we use the Promise API to return a promise, which is fulfilled when the test completes.
it("should track time", function() {
return new Promise(function (fulfill, reject){
var startTime = new Date();
window.setTimeout(function() {
var endTime = new Date();
expect(endTime - startTime).to.equal(200);
fulfill();
}, 200);
});
});
You can also use Chai As Promised for more fluent Promise handling:
it("should track time", function() {
var promise = new Promise(function (fulfill, reject){
var startTime = new Date();
window.setTimeout(function() {
var endTime = new Date();
fulfill(endTime - startTime);
}, 200);
});
promise.should.eventually.equal(200)
return promise;
});
Enjoy Testing? Take it a step further with my free course on Visual Regression Testing with WebdriverIO