Bird
Raised Fist0
Expressframework~10 mins

Testing authentication flows in Express - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Testing authentication flows
Start Test
↓
Send Login Request
↓
Check Credentials
↓
Generate Token
↓
Send Response
↓
Verify Response
↓
End Test
This flow shows how a test sends a login request, checks credentials, returns a token or error, and verifies the response.
Execution Sample
Express
test('login success', async () => {
  const res = await request(app)
    .post('/login')
    .send({ username: 'user', password: 'pass' });
  expect(res.statusCode).toBe(200);
  expect(res.body.token).toBeDefined();
});
This test sends a login request and checks if the response status is 200 and a token is returned.
Execution Table
StepActionInputInternal CheckOutputTest Assertion
1Send POST /login{username:'user', password:'pass'}N/ARequest sentN/A
2Check credentialsuser/passCredentials valid?YesN/A
3Generate tokenuser infoToken createdToken stringN/A
4Send responseToken stringResponse status 200{token: '...'}N/A
5Verify response{token: '...'}Status 200 and token presentPassexpect(res.statusCode).toBe(200) and expect(res.body.token).toBeDefined()
6Test endsN/AN/ATest passedTest completes successfully
💡 Test ends after verifying response status and token presence
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
res.statusCodeundefinedundefinedundefined200200
res.body.tokenundefinedundefinedtoken stringtoken stringtoken string
Key Moments - 2 Insights
Why do we check both status code and token in the response?
Because status code 200 means success, but token presence confirms authentication succeeded. See execution_table rows 4 and 5.
What happens if credentials are invalid?
The internal check fails at step 2, and the server returns an error response instead of a token. This stops the test from passing.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the status code after step 4?
A200
B401
C500
Dundefined
💡 Hint
Check the 'Output' column at step 4 in the execution_table.
At which step is the token generated?
AStep 4
BStep 2
CStep 3
DStep 5
💡 Hint
Look at the 'Action' column in execution_table where token creation happens.
If the credentials were invalid, what would change in the execution table?
AResponse status would be 200
BStep 2 would show 'No' and no token generated
CStep 3 would generate a token anyway
DTest would pass
💡 Hint
Refer to key_moments about invalid credentials and execution_table step 2.
Concept Snapshot
Testing authentication flows in Express:
- Send POST request with credentials
- Server checks credentials
- If valid, generate token and respond 200
- If invalid, respond with error
- Test asserts status and token presence
- Use supertest for request simulation
Full Transcript
This visual execution shows how to test authentication flows in Express. The test sends a login request with username and password. The server checks if credentials are valid. If yes, it generates a token and sends it back with status 200. The test then verifies the response status and token presence to confirm success. If credentials are invalid, the server returns an error and no token. The test fails in that case. This step-by-step trace helps beginners see how requests, checks, and responses happen in authentication testing.

Practice

(1/5)
1. What is the main purpose of testing authentication flows in an Express app?
easy
A. To check if the server can handle large amounts of traffic
B. To verify users can log in and access protected routes correctly
C. To ensure the database schema is optimized
D. To test the styling of the login page

Solution

  1. Step 1: Understand authentication flow testing

    Testing authentication flows means checking if users can log in and access parts of the app that require login.
  2. Step 2: Identify the main goal

    The main goal is to verify correct login and access control, not performance or styling.
  3. Final Answer:

    To verify users can log in and access protected routes correctly -> Option B
  4. Quick Check:

    Authentication testing = verify login and access [OK]
Hint: Authentication tests check login and access only [OK]
Common Mistakes:
  • Confusing authentication testing with performance testing
  • Thinking styling or database optimization is tested here
  • Assuming authentication tests check UI design
2. Which of the following is the correct way to import and use supertest for testing an Express app's authentication route?
easy
A. const request = require('supertest'); const app = require('./app');
B. const supertest = import('supertest'); const app = require('./app');
C. import request from 'supertest'; import app from './app';
D. import * as request from 'supertest'; const app = require('./app');

Solution

  1. Step 1: Identify CommonJS import syntax

    Most Express apps use CommonJS syntax with require, so const request = require('supertest'); is correct.
  2. Step 2: Match import style for app

    Similarly, const app = require('./app'); is correct for CommonJS modules.
  3. Final Answer:

    const request = require('supertest'); const app = require('./app'); -> Option A
  4. Quick Check:

    Use CommonJS require for supertest and app [OK]
Hint: Use CommonJS require syntax for supertest and app [OK]
Common Mistakes:
  • Mixing require() with import in CommonJS code
  • Using dynamic import incorrectly
  • Using namespace import when default import is expected
3. Given this test code snippet, what will be the status code returned when testing a protected route without authentication?
await request(app).get('/dashboard').expect(401);
medium
A. 401 (Unauthorized) - Access denied
B. 200 (OK) - Access granted
C. 404 (Not Found) - Route missing
D. 500 (Server Error) - Internal error

Solution

  1. Step 1: Understand protected route behavior

    Protected routes require authentication; without it, the server should deny access.
  2. Step 2: Identify correct HTTP status for unauthorized access

    HTTP status 401 means unauthorized access, which fits this case.
  3. Final Answer:

    401 (Unauthorized) - Access denied -> Option A
  4. Quick Check:

    Unauthenticated access to protected route = 401 [OK]
Hint: 401 means unauthorized access denied [OK]
Common Mistakes:
  • Expecting 200 without authentication
  • Confusing 401 with 404 or 500
  • Assuming route is missing instead of protected
4. You wrote this test to check login failure:
await request(app).post('/login').send({ username: 'user', password: 'wrong' }).expect(401);

But the test fails even when the server returns 200. What is the likely mistake?
medium
A. The test should use GET instead of POST
B. The test is missing async/await keywords
C. The server does not properly check password and returns 200 anyway
D. The test should expect 404 instead of 401

Solution

  1. Step 1: Analyze test expectation vs server behavior

    The test expects 401 for wrong password, but server returns 200, so server likely accepts wrong password.
  2. Step 2: Identify root cause

    The server probably lacks proper password validation, causing incorrect success response.
  3. Final Answer:

    The server does not properly check password and returns 200 anyway -> Option C
  4. Quick Check:

    Wrong password but 200 means server validation missing [OK]
Hint: Check server password validation if test expects 401 but gets 200 [OK]
Common Mistakes:
  • Assuming test syntax error without checking server logic
  • Using wrong HTTP method for login
  • Expecting wrong status code for authentication failure
5. You want to test that after a successful login, the user can access a protected route using the received token. Which sequence correctly tests this flow using supertest?
hard
A. Post login with wrong password, then get protected route with token
B. Get protected route first, then post login with token in body
C. Post login without saving token, then get protected route without headers
D. Post login, save token from response, then get protected route with Authorization header set to token

Solution

  1. Step 1: Understand authentication token flow

    After login, server returns a token. This token must be sent in Authorization header to access protected routes.
  2. Step 2: Identify correct test sequence

    First post login, save token from response, then use token in Authorization header for protected route request.
  3. Final Answer:

    Post login, save token from response, then get protected route with Authorization header set to token -> Option D
  4. Quick Check:

    Login -> save token -> use token in header for protected route [OK]
Hint: Save token after login, then use it in Authorization header [OK]
Common Mistakes:
  • Trying to access protected route before login
  • Not sending token in Authorization header
  • Using wrong password in login step
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