Bird
Raised Fist0
Expressframework~5 mins

Testing POST with request body in Express - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of testing a POST request with a request body in Express?
To verify that the server correctly receives, processes, and responds to data sent in the request body, ensuring the API behaves as expected.
Click to reveal answer
beginner
Which middleware is commonly used in Express to parse JSON request bodies before testing POST endpoints?
express.json() middleware is used to parse incoming JSON request bodies so the server can access the data in req.body.
Click to reveal answer
beginner
In testing POST requests, why is it important to set the 'Content-Type' header to 'application/json'?
Setting 'Content-Type' to 'application/json' tells the server to parse the request body as JSON, which is necessary for correct data handling.
Click to reveal answer
intermediate
What tool can be used in Node.js to test Express POST endpoints by sending HTTP requests with a body?
Supertest is a popular tool that allows sending HTTP requests, including POST with bodies, to test Express endpoints easily.
Click to reveal answer
intermediate
How do you check the response body in a test after sending a POST request with a JSON body?
You can use assertions to compare the response body with expected data, for example, using expect(response.body).toEqual(expectedData) in Jest.
Click to reveal answer
Which Express middleware is needed to parse JSON bodies in POST requests?
Aexpress.raw()
Bexpress.urlencoded()
Cexpress.static()
Dexpress.json()
What header should you set when sending JSON data in a POST request?
AContent-Type: application/json
BAccept: application/json
CContent-Type: text/plain
DAuthorization: Bearer token
Which tool is commonly used to test Express POST endpoints with request bodies?
ASupertest
BMocha
CNodemon
DWebpack
In a test, how do you send a JSON body with Supertest?
A.set('Content-Type', 'text/html')
B.send({ key: 'value' })
C.query({ key: 'value' })
D.attach('file')
Why do you assert the response body after a POST request test?
ATo test database connection
BTo check server logs
CTo verify the server processed data correctly
DTo check network speed
Explain the steps to test a POST endpoint in Express that accepts JSON data.
Think about middleware, headers, sending data, and checking results.
You got /5 concepts.
    Describe why setting the correct Content-Type header is important when testing POST requests with a body.
    Consider how the server knows how to read the data sent.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of testing a POST request with a request body in Express?
      easy
      A. To verify the server correctly receives and processes the sent data
      B. To check if the server can handle GET requests
      C. To test the server's response time only
      D. To confirm the server ignores the request body

      Solution

      1. Step 1: Understand POST request role

        POST requests send data to the server, so testing ensures data is received and handled.
      2. Step 2: Identify testing goal

        Testing POST with a body checks if the server processes the data correctly, not just the response time or ignoring data.
      3. Final Answer:

        To verify the server correctly receives and processes the sent data -> Option A
      4. Quick Check:

        POST body testing = verify data handling [OK]
      Hint: POST tests check data handling, not just response [OK]
      Common Mistakes:
      • Confusing POST with GET request testing
      • Ignoring the request body in tests
      • Testing only response time without data validation
      2. Which of the following is the correct way to send JSON data in a POST request test using Supertest in Express?
      easy
      A. request(app).post('/api').body({ name: 'John' })
      B. request(app).post('/api').send({ name: 'John' })
      C. request(app).post('/api').query({ name: 'John' })
      D. request(app).get('/api').send({ name: 'John' })

      Solution

      1. Step 1: Identify correct HTTP method and data sending

        POST requests use .post() and .send() to include JSON body data in Supertest.
      2. Step 2: Evaluate options

        The option with request(app).post('/api').send({ name: 'John' }) uses .post() and .send() correctly. Using .get() is wrong for sending body data. Using .query() sends URL params, not body data. Using .body() is not a Supertest method.
      3. Final Answer:

        request(app).post('/api').send({ name: 'John' }) -> Option B
      4. Quick Check:

        POST + .send() = correct syntax [OK]
      Hint: Use .post() with .send() to send JSON body [OK]
      Common Mistakes:
      • Using GET instead of POST for sending body data
      • Using .query() instead of .send() for body
      • Trying to use .body() method which doesn't exist
      3. Given this Express route and test code, what will be the response body when the test runs?
      app.use(express.json());
      app.post('/user', (req, res) => {
        res.json({ received: req.body.name });
      });
      
      request(app)
        .post('/user')
        .send({ name: 'Alice' })
        .then(res => console.log(res.body));
      medium
      A. { "received": "Alice" }
      B. { "name": "Alice" }
      C. {}
      D. Error: req.body is undefined

      Solution

      1. Step 1: Understand route response

        The route sends back JSON with key 'received' set to req.body.name.
      2. Step 2: Analyze test request body

        The test sends { name: 'Alice' }, so req.body.name is 'Alice'.
      3. Final Answer:

        { "received": "Alice" } -> Option A
      4. Quick Check:

        Response body = { received: 'Alice' } [OK]
      Hint: Response echoes req.body.name as 'received' key [OK]
      Common Mistakes:
      • Expecting original body instead of transformed response
      • Forgetting to parse JSON body in Express (missing middleware)
      • Assuming empty response or error without middleware
      4. You wrote this test for your Express POST route but it fails with an empty req.body. What is the likely cause?
      app.post('/data', (req, res) => {
        res.json(req.body);
      });
      
      request(app)
        .post('/data')
        .send({ key: 'value' })
        .expect(200, { key: 'value' });
      medium
      A. The test expects wrong status code
      B. Using .send() instead of .query() to send data
      C. The route should use GET instead of POST
      D. Missing middleware to parse JSON body like express.json()

      Solution

      1. Step 1: Identify why req.body is empty

        Express needs middleware like express.json() to parse JSON body; without it, req.body is empty.
      2. Step 2: Check test and route setup

        The test sends JSON with .send(), which is correct; route uses POST correctly; status 200 is expected.
      3. Final Answer:

        Missing middleware to parse JSON body like express.json() -> Option D
      4. Quick Check:

        Missing express.json() = empty req.body [OK]
      Hint: Add express.json() middleware to parse JSON body [OK]
      Common Mistakes:
      • Not adding express.json() middleware
      • Confusing .send() with .query() for body data
      • Expecting req.body without parsing middleware
      5. You want to test an Express POST route that accepts a JSON array in the request body and returns the array length. Which test code correctly sends the array and checks the response?
      app.use(express.json());
      app.post('/items', (req, res) => {
        res.json({ count: req.body.length });
      });
      hard
      A. request(app).post('/items').send({ length: 3 }).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });
      B. request(app).post('/items').send('{1,2,3}').expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });
      C. request(app).post('/items').send([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });
      D. request(app).post('/items').query([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });

      Solution

      1. Step 1: Understand route expects JSON array body

        The route reads req.body.length, so the body must be an array.
      2. Step 2: Check test sending array correctly

        request(app).post('/items').send([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); sends an actual array with .send(), which is correct. request(app).post('/items').send('{1,2,3}').expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); sends a string, not JSON array. request(app).post('/items').send({ length: 3 }).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); sends an object, not array. request(app).post('/items').query([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); uses .query() which sends URL params, not body.
      3. Final Answer:

        request(app).post('/items').send([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); -> Option C
      4. Quick Check:

        Send array with .send() to test array length [OK]
      Hint: Send array directly with .send() for JSON body tests [OK]
      Common Mistakes:
      • Sending array as string instead of JSON
      • Using .query() instead of .send() for body data
      • Sending object with length property instead of array
      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