NodeJS testing with Mocha and Should
There are a lot of frameworks to include tests in your projects, one popular choice is Mocha and the Should package for the assertion syntax.
Links:
Installation
npm install -g mocha npm install should
(-g flag used to install mocha globally so it will be possible to use the mocha executable from anywhere)
Assertions with Should.
Should is a NodeJS module that makes it easy to declare assertions in a kind of natural language. It will throw an exception if the code does not comply with them.
| var should = require('should'); | |
| var testobj = { | |
| name:"Mary", | |
| age:29, | |
| company:"none", | |
| email:"mary@mary.com", | |
| properties:[ | |
| { | |
| "name":"Lake house", | |
| "value":100000 | |
| } | |
| ] | |
| }; | |
| //This should pass (no exception will be thrown) | |
| testobj.should.have.property("name"); | |
| testobj.age.should.be.above(20); | |
| testobj.company.should.be.a("string"); | |
| testobj.properties.should.not.be.empty; | |
| //This will throw an exception | |
| testobj.properties.length.should.be.within(10,20); |
Check the should.js documentation or source for all the features.
Using Mocha and Should
In the following snippet a fake Validator component will be tested
| var mocha = require('mocha'); | |
| var should = require('should'); | |
| //Our fake validation component | |
| var Validator = { | |
| validateName:function(name){ | |
| if (typeof name !== 'string') | |
| return false; | |
| if(name.length==0) | |
| return false; | |
| return true; | |
| } | |
| } | |
| //The test suite | |
| describe('Validator',function(){ | |
| var testName,valid; | |
| it('should not accept invalid types',function(done){ | |
| testName = 123; | |
| valid = Validator.validateName(testName); | |
| valid.should.be.false; | |
| done(); | |
| }); | |
| it('shoud not accept empty string',function(done){ | |
| testName = ''; | |
| valid = Validator.validateName(testName); | |
| valid.should.be.false; | |
| done(); | |
| }); | |
| it('should accept valid strings',function(done){ | |
| testName = 'Valid Name'; | |
| valid = Validator.validateName(testName); | |
| valid.should.be.true; | |
| done(); | |
| }) | |
| }) |
Running the tests with mocha executable
If you invoke mocha from the command line, it will search for a file called tests.js or a directory called tests. You can also specify the name of the test file as:
mocha mytestfile.js
Presenting the results
Mocha has a parameter called ‘reporter’ that allows to get the results in different formats. To list all the avalaible reporters use
mocha --reporters
Using the spec reporter
mocha -R spec mochatest.js
We will get the following:
