Mocha
In this tutorial we will write test code and start testing our JavaScript code using Mocha.
In the previous tutorials Mocha - Introduction and Mocha - Setup Mocha for testing we learned how to install Mocha and then set it up for testing. Feel free to check that out.
In the following code we are creating Box class that will be used to create objects.
Box
We are saving the code inside the file Box.js which is inside the js directory.
Box.js
js
var Box = function(length, width, height) { this.length = length; this.width = width; this.height = height; }; Box.prototype.getVolume = function() { return this.length * this.width * this.height; }; module.exports = Box;
Inside the Box.js file we are creating the Box class which will be used to instantiate objects of the Box.
We initialise the Box by passing the length, width and height of the Box to the constructor at the time of object creation.
To get the volume we call the getVolume method.
getVolume
In the last line we are exporting the Box. This Box will be required in the test code.
Inside the test directory create a new file by the name Box.test.js. This is were we will write the test code.
test
Box.test.js
At this moment the test file is empty and if we run the command npm run test we will get the following output.
npm run test
$ npm run test > mocha-project@1.0.0 test /Users/yusufshakeel/Documents/GitHub/mocha-project > mocha || true 0 passing (2ms)
Since we don't have any test so, we get 0 passing test.
The first thing we will do is requrie the assert module of Node in our Box.test.js file.
assert
The assert module provides simple set of assertion tests.
Next we will require the Box module in our test file.
So, our code will look like the following.
var assert = require('assert'); var Box = require('../js/Box');
Note! We don't have to put the extension .js in the above line var Box = require('../js/Box');. It gets inferred automatically.
.js
var Box = require('../js/Box');
Now we will describe our test.
describe
describe('Testing Box', function() { // some code goes here ... })
Note! We use describe to group similar tests.
The first parameter describes the group of tests. The second parameter is a function which holds one or more tests.
Inside the describe we will write our actual tests using the it method.
it
In this tutorial we will test the volume of the Box.
describe('Testing Box', function() { it('should assert the volume of the Box', function() { // some code goes here... }) })
For the it method the first parameter describes the test. The second parameter is a function inside which we write our test code.
equal
Inside the function body of the it we will write the following code to assert the volume of the Box.
Assume that the box is 10 cm in length, 20 cm in breadth and 30 cm in height.
So, the volume of the box will be 10 x 20 x 30 = 6000 cm3.
10 x 20 x 30 = 6000 cm3
To assert this we will write the following code.
var obj = new Box(10, 20, 30); assert.equal(obj.getVolume(), 6000);
So, we are using the equal method which takes two arguments. First is the actual value and the second is the expected value. If they both match then the test is successful otherwise the test fails.
Our Box.test.js file will hold the following code.
var assert = require('assert'); var Box = require('../js/Box'); describe('Testing Box', function() { it('should assert the volume of the Box', function() { var obj = new Box(10, 20, 30); assert.equal(obj.getVolume(), 6000); }) })
If we now run the test using npm run test we will get the following output.
$ npm run test > mocha-project@1.0.0 test /Users/yusufshakeel/Documents/GitHub/mocha-project > mocha || true Testing Box ✓ should assert the volume of the Box 1 passing (8ms)
So, from the above output we can tell that the test is passing and the getVolume() method is working correctly.
getVolume()