0
0
Node.jsframework~20 mins

Mocking modules and functions in Node.js - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Master of Mocking Modules
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output when mocking a module function with Jest?
Consider the following Node.js module and test code using Jest. What will be the output of the test?
Node.js
// math.js
export function add(a, b) {
  return a + b;
}

// math.test.js
import * as math from './math';

test('mock add function', () => {
  jest.spyOn(math, 'add').mockImplementation(() => 42);
  const result = math.add(1, 2);
  console.log(result);
});
A42
B3
Cundefined
DTypeError: math.add is not a function
Attempts:
2 left
💡 Hint
Think about what jest.spyOn with mockImplementation does to the original function.
📝 Syntax
intermediate
2:00remaining
Which option correctly mocks a default export function in Jest?
Given a module with a default export function, which Jest mock syntax correctly mocks it?
Node.js
// greet.js
export default function greet(name) {
  return `Hello, ${name}!`;
}

// greet.test.js
import greet from './greet';

jest.mock('./greet', () => {
  // Fill in the mock implementation
});
Areturn { greet: jest.fn(() => 'Hi!') };
Breturn jest.fn(() => 'Hi!');
Creturn { default: jest.fn(() => 'Hi!') };
D;)'!iH' >= )((nf.tsej nruter
Attempts:
2 left
💡 Hint
Default exports are properties named 'default' in the mock object.
🔧 Debug
advanced
2:00remaining
Why does this Jest mock not replace the imported function?
Look at this test code. Why does the mock not replace the original function when called?
Node.js
// utils.js
export function fetchData() {
  return 'real data';
}

// app.js
import { fetchData } from './utils';
export function getData() {
  return fetchData();
}

// app.test.js
import { getData } from './app';
import * as utils from './utils';

jest.mock('./utils');
test('mock fetchData', () => {
  utils.fetchData.mockReturnValue('mocked data');
  const result = getData();
  console.log(result);
});
ABecause utils.fetchData is not imported correctly.
BBecause fetchData is not a mock function and cannot use mockReturnValue.
CBecause jest.mock must be called at the top level, not inside the test.
DBecause getData imports fetchData before the mock is applied, so it uses the original.
Attempts:
2 left
💡 Hint
Consider when the module is imported and when the mock is applied.
state_output
advanced
2:00remaining
What is the output after resetting mocks in Jest?
Given this test code, what will be the output of the console.log statements?
Node.js
const utils = {
  getNumber: () => 5
};

jest.mock('./utils', () => ({
  getNumber: jest.fn(() => 10)
}));

import { getNumber } from './utils';

console.log(getNumber());

getNumber.mockReset();

console.log(getNumber());
A
10
5
B
10
undefined
C
10
10
D
5
undefined
Attempts:
2 left
💡 Hint
What does mockReset do to the mock function's implementation?
🧠 Conceptual
expert
3:00remaining
Which statement about mocking ES modules with Jest is true?
Select the correct statement about mocking ES modules and their functions in Jest.
AYou can mock named exports by replacing the entire module with jest.mock and returning an object with the named exports as jest.fn().
Bjest.spyOn cannot be used on ES module functions because they are read-only.
CTo mock a default export, you must always use jest.fn() directly without wrapping in an object.
DJest automatically mocks all ES module functions without any configuration.
Attempts:
2 left
💡 Hint
Think about how jest.mock replaces modules and how named exports are mocked.