Bird
Raised Fist0
Node.jsframework~10 mins

Code coverage basics in Node.js - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Code coverage basics
Write code to test
↓
Write tests for code
↓
Run tests with coverage tool
↓
Coverage tool tracks executed lines
↓
Generate coverage report
↓
Review report to find untested code
↓
Improve tests to cover missing parts
↩Back to Run tests
This flow shows how code coverage works: write code, test it, run coverage, see report, then improve tests.
Execution Sample
Node.js
function sum(a, b) {
  if (a && b) {
    return a + b;
  }
  return 0;
}

// Test calls sum(1, 2) and sum(0, 2)
This code defines a sum function with a condition and tests it with two calls to check coverage.
Execution Table
StepCode LineExecuted?ReasonCoverage Status
1function sum(a, b) {YesFunction declaredCovered
2 if (a && b) {YesTest sum(1, 2) runs this true branchCovered
3 return a + b;Yessum(1, 2) returns 3Covered
4 }YesEnd if blockCovered
5 return 0;YesTest sum(0, 2) runs this else branchCovered
6}YesFunction endsCovered
7// Test calls sum(1, 2) and sum(0, 2)N/AComments not countedN/A
💡 All code lines executed by tests, coverage is 100%
Variable Tracker
VariableStartAfter sum(1, 2)After sum(0, 2)
aundefined10
bundefined22
return valuenone30
Key Moments - 2 Insights
Why does the coverage tool mark line 5 as covered even though it looks like an else?
Because the test sum(0, 2) calls the function with a=0, b=2, which makes the if condition false, so line 5 runs. See execution_table row 5.
Are comments counted in code coverage?
No, comments are ignored by coverage tools. See execution_table row 7 marked N/A.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which line runs only when both a and b are truthy?
ALine 3 (return a + b)
BLine 5 (return 0)
CLine 2 (if condition)
DLine 1 (function declaration)
💡 Hint
Check rows 2 and 3 in execution_table where sum(1, 2) runs the true branch.
At which step does the coverage tool detect the else branch is executed?
AStep 2
BStep 3
CStep 5
DStep 1
💡 Hint
Look at execution_table row 5 where return 0 runs for sum(0, 2).
If we remove the test sum(0, 2), what happens to coverage on line 5?
ALine 5 remains covered
BLine 5 becomes uncovered
CLine 5 is ignored
DLine 5 coverage increases
💡 Hint
Refer to variable_tracker and execution_table rows showing line 5 runs only when sum(0, 2) is called.
Concept Snapshot
Code coverage tracks which lines run during tests.
Run tests with coverage tool to see report.
Report shows covered and uncovered code.
Improve tests to cover missing lines.
Helps find untested parts of code.
Full Transcript
Code coverage basics means checking which parts of your code run when you run tests. You write your code and tests, then run a coverage tool that tracks which lines execute. It creates a report showing covered and uncovered lines. For example, a sum function with an if condition can be tested with different inputs to cover both branches. Coverage helps you find code not tested so you can add tests and improve quality.

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

  1. Step 1: Understand the purpose of code coverage

    Code coverage shows which parts of your code are run when tests execute.
  2. Step 2: Identify what code coverage measures

    It measures the percentage of code lines or branches tested, not speed or size.
  3. Final Answer:

    How much of the code is executed by tests -> Option A
  4. 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

  1. Step 1: Recall nyc usage with test runners

    nyc is a tool that wraps test commands like mocha to collect coverage.
  2. Step 2: Identify correct syntax

    Running nyc mocha runs mocha tests with coverage collection.
  3. Final Answer:

    nyc mocha -> Option B
  4. 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

  1. Step 1: Analyze which branches run

    The test calls add(2, 3), so the if condition (a > 0) is true, running the first return.
  2. Step 2: Identify uncovered code

    The else branch is never executed, so that part is not covered.
  3. Final Answer:

    50% coverage - else branch not executed -> Option D
  4. 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

  1. Step 1: Understand why coverage can be zero

    If source files are excluded in nyc config, coverage won't track them.
  2. Step 2: Check other options

    Tests running but no coverage means exclusion is likely; nyc installed and mocha compatible.
  3. Final Answer:

    The source files are excluded in nyc config -> Option A
  4. 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

  1. Step 1: Identify which branches are tested

    Calling checkValue(true) runs the if branch only, not the else branch.
  2. Step 2: Determine how to cover else branch

    Passing false triggers the else branch, increasing coverage.
  3. Final Answer:

    Add a test calling checkValue(false) -> Option C
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard