Practice
1. What is the main purpose of the Node.js built-in test runner?
easy
Solution
Step 1: Understand the role of the test runner
The Node.js built-in test runner is designed to help developers write and run tests without needing additional testing frameworks.Step 2: Compare options with this purpose
Options B, C, and D describe unrelated tasks like compiling, deploying, or monitoring, which are not the test runner's function.Final Answer:
To write and run tests easily without extra tools -> Option AQuick Check:
Test runner purpose = write and run tests [OK]
Hint: Test runner = tool to run tests simply [OK]
Common Mistakes:
- Confusing test runner with build tools
- Thinking it deploys apps
- Assuming it monitors performance
2. Which of the following is the correct way to import the assertion module in a Node.js test file?
easy
Solution
Step 1: Recall Node.js import syntax for CommonJS
Node.js traditionally usesconst assert = require('assert');to import modules in CommonJS style.Step 2: Check each option's syntax
import assert from 'assert'; uses ES module syntax but without enabling ES modules, it may fail. import { assert } from 'assert'; is incorrect becauseassertis the default export, not a named export. require import assert from 'assert'; is invalid syntax.Final Answer:
const assert = require('assert'); -> Option AQuick Check:
CommonJS import = require() [OK]
Hint: Use require() for assert in Node.js tests [OK]
Common Mistakes:
- Using ES module import without config
- Trying to destructure assert
- Mixing require and import keywords
3. What will be the output when running the following test code with
node --test?
import test from 'node:test';
import assert from 'assert';
test('simple addition', () => {
assert.strictEqual(2 + 2, 4);
});
test('failing test', () => {
assert.strictEqual(3 * 3, 8);
});medium
Solution
Step 1: Analyze each test assertion
The first test checks if 2 + 2 equals 4, which is true, so it passes. The second test checks if 3 * 3 equals 8, which is false, so it fails.Step 2: Understand test runner behavior
Node.js test runner runs all tests and reports which pass or fail. It does not stop on first failure.Final Answer:
First test passes, second test fails with assertion error -> Option DQuick Check:
Correct assertions pass, wrong ones fail [OK]
Hint: Check each assertion result carefully [OK]
Common Mistakes:
- Assuming all tests pass
- Thinking syntax error occurs
- Believing test runner stops on first fail
4. Identify the error in this test code snippet:
import test from 'node:test';
import assert from 'assert';
test('check truth', () => {
assert.equal(true, 1);
});medium
Solution
Step 1: Understand assert.equal vs assert.strictEqual
assert.equaluses loose equality (==) which allows type coercion, sotrue == 1passes, but this can cause unexpected results.Step 2: Identify best practice for strict checks
Usingassert.strictEqualis recommended to avoid type coercion and ensure exact equality.Final Answer:
Using assert.equal instead of assert.strictEqual causes a type coercion issue -> Option BQuick Check:
Use strictEqual to avoid type coercion [OK]
Hint: Prefer strictEqual for exact matches [OK]
Common Mistakes:
- Ignoring difference between equal and strictEqual
- Thinking async is always required
- Misunderstanding import syntax
5. You want to write a test that checks if a function
getUserName(id) returns a non-empty string for valid IDs and throws an error for invalid IDs. Which approach correctly uses the Node.js built-in test runner and assertions?hard
Solution
Step 1: Define tests for both valid and invalid cases
Testing valid IDs requires checking the return is a non-empty string. Testing invalid IDs requires checking that an error is thrown.Step 2: Use appropriate assertions
assert.okcan check conditions like type and length.assert.throwsverifies that calling the function with invalid input throws an error.Final Answer:
Use two tests: one with assert.ok(typeof result === 'string' && result.length > 0), another with assert.throws(() => getUserName(invalidId)) -> Option CQuick Check:
Separate tests for success and error cases [OK]
Hint: Test success and error cases separately with assert [OK]
Common Mistakes:
- Ignoring error case tests
- Checking empty string instead of non-empty
- Using console.log instead of assertions
