Mocha is a test framework to run tests.
https://mochajs.org/#assertions
Chai is an assertion library and you can find full documentation in the following link.
https://www.chaijs.com/api/bdd/
There are three type of assertion libraries in Chai.
- Expect
- Should
- Assert
expect
and should
use the same chainable language to construct assertions.
Assume that expect library is used like below
expect(firstName).to.be.a('string');
expect(firstName).to.equal('kenan');
expect(firstName).to.have.lengthOf(5);
expect(beverages).to.have.property('tea').with.lengthOf(3);
Above code could be written with should library like below.
firstName.should.be.a('string');
firstName.should.equal('kenan');
firstName.should.have.lengthOf(5);
beverages.should.have.property('tea').with.lengthOf(3);
You can find more detailed usage with Express, Mocha and Chai in the following repository
https://github.com/nodejs-projects-kenanhancer/express-demo.git
You can find all the usages in the following code.
const chai = require('chai');
const { expect, assert } = chai;
const should = chai.should();
const firstName = 'kenan';
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
describe('Chai Expect Usage',()=>{
it('Expect Simple Usage',()=>{
expect(firstName).to.be.a('string');
expect(firstName).to.equal('kenan');
expect(firstName).to.have.lengthOf(5);
expect(beverages).to.have.property('tea').with.lengthOf(3);
});
});
describe('Chai Should Usage', ()=>{
it('Should Simple Usage', ()=>{
firstName.should.be.a('string');
firstName.should.equal('kenan');
firstName.should.have.lengthOf(5);
beverages.should.have.property('tea').with.lengthOf(3);
});
});
describe('Chai Assert Usage', ()=>{
it('Assert Simple Usage',()=>{
assert.typeOf(firstName, 'string');
assert.typeOf(firstName, 'string','firstName is a string');
assert.equal(firstName, 'kenan', 'firstName equal `kenan`');
assert.lengthOf(firstName, 5, 'firstName`s value has a length of 5');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');
});
});
describe('pow', function(){
it('raises to n-th power', function(){
assert.equal(Math.pow(2,3), 8);
expect(Math.pow(2,3)).to.equal(8);
Math.pow(2,3).should.equal(8);
});
});
describe('Array', ()=>{
describe('#indexOf', ()=>{
it('it should return -1 when the value is not present', ()=>{
const myArray = [1,2,3];
assert.isArray(myArray, 'is array of numbers');
assert.include(myArray, 2, 'array contains 2');
assert.lengthOf(myArray, 3, 'array contains 3 numbers');
assert.equal(myArray.indexOf(4), -1);
expect(myArray).to.be.an('array').that.includes(2);
expect(myArray).to.have.lengthOf(3);
expect(myArray.length).to.equal(3);
myArray.should.be.an('array').that.includes(2);
myArray.should.have.lengthOf(3);
myArray.length.should.equal(3);
});
});
});
Same code can be executed in the following repl editor.To see unit tests open myTest.js
file.
More examples are in the following demo. To see unit tests open myTest.js
file.