Mocha #
Mocha is a versatile JavaScript testing framework commonly used for testing Node.js applications. It provides a flexible and feature-rich environment for writing and executing tests. Below is a basic overview of using Mocha in a Node.js application:
Installation: #
Install Mocha as a development dependency:
npm install --save-dev mocha
Creating a Simple Test: #
Create a test file (e.g., sum.test.js):
const assert = require('assert');
function sum(a, b) {
return a + b;
}
describe('Sum Function', () => {
it('should return the sum of two numbers', () => {
assert.strictEqual(sum(1, 2), 3);
});
});
This test checks if the sum function correctly adds 1 and 2 to equal 3.
Running Tests: #
Run Mocha tests using the command:
npx mocha
Mocha will discover and execute tests, providing results in the console.
Assertions and Matchers: #
Mocha works well with various assertion libraries; here, we’re using Node.js’s built-in assert module:
const assert = require('assert');
assert.strictEqual(sum(2, 2), 4);
Alternatively, you can use assertion libraries like Chai for more expressive assertions.
Testing Asynchronous Code: #
Mocha supports testing asynchronous code using callback functions or Promises:
function fetchData(callback) {
setTimeout(() => callback('data'), 100);
}
describe('Async Function', () => {
it('should fetch data asynchronously', (done) => {
fetchData((data) => {
assert.strictEqual(data, 'data');
done();
});
});
});
Hooks: #
Mocha provides hooks for setup and teardown:
describe('Test Suite', () => {
before(() => {
// Setup code
});
after(() => {
// Teardown code
});
beforeEach(() => {
// Code to run before each test
});
afterEach(() => {
// Code to run after each test
});
it('Test Case', () => {
// Test code
});
});
Specifying Tests with “it” and “describe”: #
Organize tests using the describe and it functions:
describe('Math Operations', () => {
it('should add two numbers', () => {
// Test code
});
it('should subtract two numbers', () => {
// Test code
});
});
Skipping and Focusing Tests: #
Skip or focus on specific tests using skip and only:
describe('Test Suite', () => {
it.skip('skipped test', () => {
// Test code
});
it.only('focused test', () => {
// Test code
});
});
Running Tests in Watch Mode: #
Run tests in watch mode for continuous testing during development:
npx mocha --watch
Mocha will re-run tests whenever files change.
Running Tests in Parallel: #
Mocha supports running tests in parallel:
npx mocha --parallel
This can significantly speed up test execution for large test suites.
Mocha’s flexibility, rich feature set, and compatibility with various assertion libraries make it a popular choice for testing Node.js applications. Whether testing synchronous or asynchronous code, setting up hooks for setup and teardown, or organizing tests into suites, Mocha provides an intuitive and developer-friendly testing environment.