Bird
Raised Fist0
NextJSframework~5 mins

Mocking data fetching in NextJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is mocking in data fetching?
Mocking means creating fake data or responses to test how your app works without calling real servers.
Click to reveal answer
beginner
Why do we mock data fetching in Next.js apps?
We mock to avoid slow or unreliable real servers, test different scenarios, and develop features without backend ready.
Click to reveal answer
intermediate
Which Next.js feature helps with mocking data fetching on the server side?
You can use API routes in Next.js to create mock endpoints that return fake data during development.
Click to reveal answer
intermediate
How can you mock data fetching in React components inside Next.js?
You can replace fetch calls with functions that return fake data or use libraries like MSW (Mock Service Worker) to intercept requests.
Click to reveal answer
advanced
What is MSW and why is it useful for mocking data fetching?
MSW stands for Mock Service Worker. It intercepts network requests in the browser or Node.js and returns mock responses, making tests and development easier.
Click to reveal answer
What is the main purpose of mocking data fetching?
ATo simulate server responses without real network calls
BTo speed up the real server
CTo permanently replace backend APIs
DTo encrypt data before sending
Which Next.js feature can you use to create mock API endpoints?
AMiddleware
BStatic props
CImage optimization
DAPI routes
What does MSW stand for in mocking context?
AMultiple Server Web
BMock Service Worker
CMain Server Wrapper
DMock Static Website
Why might you mock data fetching during development?
ATo increase server costs
BTo slow down the app
CBackend is not ready yet
DTo disable user input
Which is NOT a benefit of mocking data fetching?
APermanent replacement of backend
BAvoiding real network delays
CFaster testing
DTesting error scenarios easily
Explain how you would mock data fetching in a Next.js app during development.
Think about both server and client side mocking.
You got /4 concepts.
    Describe the advantages of using MSW for mocking data fetching in Next.js.
    Focus on how MSW works and why it helps.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of mocking data fetching in a Next.js app?
      easy
      A. To encrypt data before sending it
      B. To speed up the production server
      C. To permanently store data on the client
      D. To simulate data retrieval without needing a real server

      Solution

      1. Step 1: Understand mocking concept

        Mocking means pretending to get data, so you don't rely on a real server.
      2. Step 2: Identify purpose in Next.js

        This helps build and test UI without waiting for real backend responses.
      3. Final Answer:

        To simulate data retrieval without needing a real server -> Option D
      4. Quick Check:

        Mocking = Simulate data fetching [OK]
      Hint: Mocking means faking data to test without a real server [OK]
      Common Mistakes:
      • Thinking mocking speeds up production
      • Confusing mocking with data storage
      • Assuming mocking encrypts data
      2. Which of the following is the correct way to create a mock async data fetch function in Next.js?
      easy
      A. async function fetchData() { return new Promise(resolve => setTimeout(() => resolve({ data: [] }), 1000)); }
      B. const fetchData = () => { return { data: [] }; }
      C. function fetchData() { setTimeout(() => { return { data: [] }; }, 1000); }
      D. const fetchData = async () => { return setTimeout(() => ({ data: [] }), 1000); }

      Solution

      1. Step 1: Check async function syntax

        async function fetchData() { return new Promise(resolve => setTimeout(() => resolve({ data: [] }), 1000)); } correctly returns a Promise that resolves after 1 second with data.
      2. Step 2: Identify incorrect patterns

        const fetchData = () => { return { data: [] }; } is synchronous, C does not return a Promise, D returns timeout ID, not data.
      3. Final Answer:

        async function fetchData() { return new Promise(resolve => setTimeout(() => resolve({ data: [] }), 1000)); } -> Option A
      4. Quick Check:

        Async + Promise + delay = async function fetchData() { return new Promise(resolve => setTimeout(() => resolve({ data: [] }), 1000)); } [OK]
      Hint: Async functions must return a Promise to mock delays [OK]
      Common Mistakes:
      • Returning data synchronously without Promise
      • Using setTimeout without Promise
      • Returning timeout ID instead of data
      3. Given this mock fetch function in Next.js:
      async function fetchData() {
        return new Promise(resolve => setTimeout(() => resolve({ users: ["Alice", "Bob"] }), 500));
      }
      
      fetchData().then(data => console.log(data.users));

      What will be logged to the console?
      medium
      A. Promise { <pending> }
      B. undefined
      C. ["Alice", "Bob"]
      D. Error: fetchData is not a function

      Solution

      1. Step 1: Understand the Promise resolution

        The function returns a Promise that resolves after 500ms with an object containing users array.
      2. Step 2: Check the then callback

        The then callback logs data.users, which is ["Alice", "Bob"].
      3. Final Answer:

        ["Alice", "Bob"] -> Option C
      4. Quick Check:

        Promise resolves to users array logged [OK]
      Hint: Promise.then logs resolved data, not the Promise itself [OK]
      Common Mistakes:
      • Expecting immediate data without waiting
      • Logging the Promise object instead of resolved value
      • Confusing function call with undefined
      4. Identify the error in this mock data fetch function:
      async function fetchData() {
        setTimeout(() => {
          return { data: [1, 2, 3] };
        }, 1000);
      }
      medium
      A. setTimeout cannot be used inside async functions
      B. The function does not return a Promise, so data is undefined
      C. The return statement inside setTimeout is invalid syntax
      D. The function should not be async if using setTimeout

      Solution

      1. Step 1: Analyze return behavior

        The function does not return anything; setTimeout callback's return is ignored.
      2. Step 2: Understand async function expectations

        Async functions should return a Promise; here, no Promise is returned, so caller gets undefined.
      3. Final Answer:

        The function does not return a Promise, so data is undefined -> Option B
      4. Quick Check:

        Async function must return Promise, not just use setTimeout [OK]
      Hint: Return a Promise to deliver data after delay [OK]
      Common Mistakes:
      • Assuming setTimeout return affects function return
      • Thinking async forbids setTimeout
      • Ignoring that async functions return Promises
      5. You want to mock fetching user profiles with a delay and filter out users with empty names. Which code correctly mocks this in Next.js?
      hard
      A. async function fetchUsers() { const users = [{ name: "", id: 1 }, { name: "Eve", id: 2 }]; return new Promise(resolve => setTimeout(() => resolve(users.filter(u => u.name)), 1000)); }
      B. function fetchUsers() { return [{ name: "", id: 1 }, { name: "Eve", id: 2 }].filter(u => u.name); }
      C. async function fetchUsers() { const users = [{ name: "", id: 1 }, { name: "Eve", id: 2 }]; return users.filter(u => u.name); }
      D. async function fetchUsers() { return new Promise(resolve => setTimeout(() => resolve([{ name: "", id: 1 }, { name: "Eve", id: 2 }]), 1000)); }

      Solution

      1. Step 1: Identify filtering and delay

        async function fetchUsers() { const users = [{ name: "", id: 1 }, { name: "Eve", id: 2 }]; return new Promise(resolve => setTimeout(() => resolve(users.filter(u => u.name)), 1000)); } filters out users with empty names and returns a Promise resolving after 1 second.
      2. Step 2: Check other options

        A returns unfiltered data with delay, B performs filtering but is synchronous and non-async without delay, C returns filtered data synchronously without delay.
      3. Final Answer:

        async function fetchUsers() { const users = [{ name: "", id: 1 }, { name: "Eve", id: 2 }]; return new Promise(resolve => setTimeout(() => resolve(users.filter(u => u.name)), 1000)); } -> Option A
      4. Quick Check:

        Filter then delay with Promise = async function fetchUsers() { const users = [{ name: "", id: 1 }, { name: "Eve", id: 2 }]; return new Promise(resolve => setTimeout(() => resolve(users.filter(u => u.name)), 1000)); } [OK]
      Hint: Filter data before resolving Promise with delay [OK]
      Common Mistakes:
      • Not filtering data before resolving
      • Returning data synchronously without delay
      • Using non-async functions for async behavior
      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