Unit Testing with Jest
Learn to write isolated unit tests for individual functions and modules using the Jest testing framework.
Unit Testing with Jest is a free Node.js Backend Development Bootcamp lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Node.js Backend Development Bootcamp learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What is Unit Testing?
Welcome to unit testing! This is a fundamental practice in software development where individual components or functions of your application are tested in isolation.
Think of it like checking each gear in a clock separately to ensure it works perfectly before assembling the whole mechanism. This helps catch bugs early!
Meet Jest: Your Testing Buddy
For Node.js, Jest is one of the most popular and developer-friendly testing frameworks. It's developed by Facebook and offers a complete, integrated solution for JavaScript testing.
- Zero Config: Often works out of the box.
- Fast: Designed for performance.
- Rich API: Powerful assertion library (matchers) included.
- Snapshot Testing: Great for UI components.
Installing Jest
Getting started with Jest is easy. You'll install it as a development dependency in your Node.js project. Open your terminal in your project's root directory and run:
npm install --save-dev jest
After installation, you can add a script to your package.json file to easily run your tests:
"scripts": { "test": "jest" }
Our First Function to Test
Let's write a simple function that we want to test. This function will add two numbers. We'll put it in a file named sum.js.
You can run this file directly to see the function in action, but later we'll use Jest to test it automatically!
function sum(a, b) {
return a + b;
}
// This allows us to use 'sum' in other files
module.exports = sum;
// Optional: Run this part only if the file is executed directly
if (require.main === module) {
console.log("Running sum(2, 3):");
console.log("Result: ", sum(2, 3)); // Expected: 5
}Structuring Your Test File
Jest looks for test files with specific naming conventions, usually .test.js or .spec.js. Let's create sum.test.js in the same directory.
Inside, we use describe() to group related tests and test() (or it()) for individual test cases. This makes your tests organized and readable.
Making Assertions with Matchers
Inside a test() block, we use expect() combined with a "matcher" to assert that a value meets certain conditions. For example, .toBe() checks for exact equality.
Here's how we'd test our sum function:
const sum = require('./sum');
describe('sum function', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
test('adds 0 + 0 to equal 0', () => {
expect(sum(0, 0)).toBe(0);
});
test('adds negative numbers correctly', () => {
expect(sum(-1, -2)).toBe(-3);
});
});Running Your Tests
Now that you have your sum.js and sum.test.js files, and Jest installed with the script configured, you can run your tests!
Simply type npm test in your terminal. Jest will find your .test.js files, execute them, and report the results. You'll see green if all tests pass!
Handling Async Tests
Many Node.js applications deal with asynchronous operations (like fetching data, database calls). Jest handles these beautifully!
You can use async/await directly in your test functions. Jest will wait for the promise to resolve before completing the test.
function fetchData() {
return new Promise(resolve => {
setTimeout(() => {
resolve("Data from API");
}, 50);
});
}
module.exports = fetchData;
// Optional: Run this part only if the file is executed directly
if (require.main === module) {
console.log("Simulating data fetch...");
fetchData().then(data => console.log("Received: ", data));
}Writing Async Tests
To test our fetchData function, we'll mark our test function as async. Jest also provides special matchers like .resolves and .rejects for promises.
Using await within your test makes asynchronous code look synchronous, improving readability.
const fetchData = require('./fetchData');
describe('fetchData function', () => {
test('should return "Data from API"', async () => {
const data = await fetchData();
expect(data).toBe('Data from API');
});
test('should resolve with specific data', () => {
return expect(fetchData()).resolves.toBe('Data from API');
});
});Jest Matcher Check
Which of the following Jest matchers would you use to check if two objects have the same value (deep comparison), not just if they are the same instance?
Unit Testing with Jest: Recap
Great job! You've learned the basics of unit testing with Jest. We covered:
- What unit testing is and its benefits.
- How to install and set up Jest.
- Structuring tests with
describeandtest. - Making assertions using
expectand matchers like.toBe()and.toEqual(). - Handling asynchronous code with
async/await.
Keep practicing and happy testing!
Frequently asked questions
Is the “Unit Testing with Jest” lesson free?
Yes — the full text of “Unit Testing with Jest” is free to read here on the web, and the Node.js Backend Development Bootcamp course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Node.js Backend Development Bootcamp course, upgrade to CoddyKit PRO.
What will I learn in “Unit Testing with Jest”?
Learn to write isolated unit tests for individual functions and modules using the Jest testing framework. You practise Node.js Backend Development Bootcamp with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Node.js Backend Development Bootcamp?
No prior experience is required. Node.js Backend Development Bootcamp on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Unit Testing with Jest” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Node.js Backend Development Bootcamp lesson?
Yes. Every Node.js Backend Development Bootcamp lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.