📖 Scenario: You are working on a small Node.js project. You want to check how much of your code is tested by your tests. This helps you find parts of your code that need more testing.
🎯 Goal: Set up a simple Node.js function and a test file. Then configure a code coverage tool to measure how much of your function is tested.
📋 What You'll Learn
Create a Node.js function in a file called math.js
Create a test file called math.test.js that tests the function
Add a configuration to enable code coverage using nyc
Run the tests with coverage and verify the coverage report
💡 Why This Matters
🌍 Real World
Code coverage is used in real projects to check how much code is tested. This helps developers find untested parts and improve test quality.
💼 Career
Many software jobs require writing tests and using coverage tools like nyc to ensure code quality and reliability.
Progress0 / 4 steps
1
Create the function to test
Create a file called math.js and write a function named add that takes two parameters a and b and returns their sum.
Node.js
Hint
Define a function named add with parameters a and b. Return their sum. Export the function using module.exports.
2
Write a test for the function
Create a file called math.test.js. Import the add function from math.js. Write a test using test that checks if add(2, 3) returns 5.
Node.js
Hint
Import add from math.js. Use test to check if add(2, 3) equals 5.
3
Configure code coverage with nyc
Create a file called .nycrc in your project root. Add JSON content with { "all": true } to enable coverage for all files. Also, add a script in package.json called test:coverage that runs nyc --reporter=lcov --reporter=text npm test.
Node.js
Hint
Create a .nycrc file with { "all": true }. Add a test:coverage script in package.json to run tests with coverage using nyc.
4
Run tests with coverage and check report
Run the command npm run test:coverage in your terminal. This runs your tests and shows a coverage report in text format. Verify that the coverage report shows 100% coverage for statements, branches, functions, and lines.
Node.js
Hint
Run npm run test:coverage in your terminal. Look for the coverage summary showing 100% coverage.
Practice
(1/5)
1. What does code coverage measure in a Node.js project?
easy
A. How much of the code is executed by tests
B. The speed of the Node.js server
C. The number of users accessing the app
D. The size of the project files
Solution
Step 1: Understand the purpose of code coverage
Code coverage shows which parts of your code are run when tests execute.
Step 2: Identify what code coverage measures
It measures the percentage of code lines or branches tested, not speed or size.
Final Answer:
How much of the code is executed by tests -> Option A
Quick Check:
Code coverage = executed code percentage [OK]
Hint: Code coverage = tested code parts percentage [OK]
Common Mistakes:
Confusing coverage with performance
Thinking coverage measures user count
Assuming coverage measures file size
2. Which command is commonly used to run tests with coverage in a Node.js project using nyc?
easy
A. nyc node test.js
B. nyc mocha
C. node --coverage test.js
D. npm run coverage
Solution
Step 1: Recall nyc usage with test runners
nyc is a tool that wraps test commands like mocha to collect coverage.
Step 2: Identify correct syntax
Running nyc mocha runs mocha tests with coverage collection.
Final Answer:
nyc mocha -> Option B
Quick Check:
nyc + test runner = coverage run [OK]
Hint: Use nyc before test command to collect coverage [OK]
Common Mistakes:
Using nyc without a test runner
Trying node --coverage (not standard)
Assuming npm run coverage always exists
3. Given this code and test, what coverage report will nyc show for the function add?
function add(a, b) {
if (a > 0) {
return a + b;
} else {
return 0;
}
}
// Test
add(2, 3);
medium
A. 75% coverage - partial lines executed
B. 100% coverage - all lines executed
C. 0% coverage - function not called
D. 50% coverage - else branch not executed
Solution
Step 1: Analyze which branches run
The test calls add(2, 3), so the if condition (a > 0) is true, running the first return.
Step 2: Identify uncovered code
The else branch is never executed, so that part is not covered.
Final Answer:
50% coverage - else branch not executed -> Option D
Quick Check:
Uncovered else branch = 50% coverage [OK]
Hint: Check if all branches run to get full coverage [OK]
Common Mistakes:
Assuming all code runs if function is called once
Ignoring branches in coverage
Confusing line coverage with function call
4. You ran nyc mocha but the coverage report shows 0% coverage. What is the most likely cause?
medium
A. The source files are excluded in nyc config
B. nyc was not installed
C. Mocha is not compatible with nyc
D. Tests did not run any code
Solution
Step 1: Understand why coverage can be zero
If source files are excluded in nyc config, coverage won't track them.
Step 2: Check other options
Tests running but no coverage means exclusion is likely; nyc installed and mocha compatible.
Final Answer:
The source files are excluded in nyc config -> Option A
Quick Check:
Excluded files cause zero coverage [OK]
Hint: Check nyc config excludes before blaming tests [OK]
Common Mistakes:
Assuming tests never ran
Ignoring nyc config exclusions
Thinking nyc and mocha are incompatible
5. You want to improve coverage for this function:
function checkValue(x) {
if (x) {
return 'Yes';
} else {
return 'No';
}
}
Your tests only call checkValue(true). What change will increase coverage?
hard
A. Add a test calling checkValue('Yes')
B. Add a test calling checkValue(1)
C. Add a test calling checkValue(false)
D. No change needed, coverage is already 100%
Solution
Step 1: Identify which branches are tested
Calling checkValue(true) runs the if branch only, not the else branch.
Step 2: Determine how to cover else branch
Passing false triggers the else branch, increasing coverage.
Final Answer:
Add a test calling checkValue(false) -> Option C
Quick Check:
Test both true and false for full branch coverage [OK]
Hint: Test both true and false to cover all branches [OK]
Common Mistakes:
Testing other truthy values
Assuming one test covers all branches
Ignoring falsy values in coverage
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.