0
0
Expressframework~20 mins

Middleware testing strategies in Express - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Middleware Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this Express middleware test?
Consider this Express middleware that adds a custom header. What will the test output when the middleware is called?
Express
const express = require('express');
const request = require('supertest');

const app = express();

function customHeader(req, res, next) {
  res.set('X-Custom-Header', 'TestValue');
  next();
}

app.use(customHeader);
app.get('/', (req, res) => res.send('Hello'));

request(app)
  .get('/')
  .end((err, res) => {
    if (err) throw err;
    console.log(res.headers['x-custom-header']);
  });
Aundefined
BError: next() not called
CTestValue
Dnull
Attempts:
2 left
💡 Hint
Think about what the middleware does before calling next() and how headers are set.
state_output
intermediate
2:00remaining
What is the value of req.processed after this middleware chain?
Given these two middlewares, what will be the value of req.processed in the final handler?
Express
const express = require('express');
const app = express();

function firstMiddleware(req, res, next) {
  req.processed = 1;
  next();
}

function secondMiddleware(req, res, next) {
  req.processed += 2;
  next();
}

app.use(firstMiddleware);
app.use(secondMiddleware);

app.get('/', (req, res) => {
  res.send(String(req.processed));
});
A1
B2
Cundefined
D3
Attempts:
2 left
💡 Hint
Remember that middlewares run in order and can modify the request object.
🔧 Debug
advanced
2:00remaining
Why does this middleware test fail with a timeout?
This test for an Express middleware hangs and eventually times out. What is the cause?
Express
function faultyMiddleware(req, res, next) {
  // Missing next call
}

const express = require('express');
const request = require('supertest');
const app = express();
app.use(faultyMiddleware);

request(app)
  .get('/')
  .expect(200)
  .end((err, res) => {
    if (err) throw err;
  });
Ares.send is called twice causing an error
BMiddleware does not call next(), causing the test to hang
CMissing error handling middleware causes failure
DRequest URL is incorrect causing no response
Attempts:
2 left
💡 Hint
Think about what happens if next() is not called.
📝 Syntax
advanced
2:00remaining
Which option correctly tests async middleware with error handling?
Given an async middleware that may throw an error, which test code correctly handles the error?
Express
async function asyncMiddleware(req, res, next) {
  try {
    await someAsyncOperation();
    next();
  } catch (err) {
    next(err);
  }
}
Arequest(app).get('/').expect(500).end((err) => { if (err) done(err); else done(); });
Brequest(app).get('/').then(() => done()).catch(done);
Crequest(app).get('/').expect(500).end(done);
Drequest(app).get('/').expect(200).end((err) => { if (err) done(err); else done(); });
Attempts:
2 left
💡 Hint
Consider how to handle errors in async middleware tests with supertest.
🧠 Conceptual
expert
3:00remaining
Which testing strategy best isolates middleware behavior?
When testing Express middleware, which approach best isolates the middleware's behavior from the rest of the app?
ATest middleware only by calling it with mock req, res, and next objects
BMount middleware on a minimal Express app and test requests against it
CTest middleware by running the full app and checking final responses
DUse integration tests that cover multiple routes and middleware chains
Attempts:
2 left
💡 Hint
Think about how to test middleware without interference from other parts.