Learn how to set up and execute end-to-end (E2E) API testing using Jest, Axios, and TypeScript. This step-by-step guide covers everything from installation and configuration to writing and running your tests, ensuring your API functions correctly in all scenarios. Perfect for developers looking to improve their API’s reliability with robust testing practices.

To set up end-to-end (E2E) API testing with Jest, Axios, and TypeScript, you’ll need to follow these steps:

1. Install Dependencies

First, you need to install the required packages. If you haven’t already set up Jest and TypeScript, you should install those as well:

npm install --save-dev jest ts-jest @types/jest
npm install axios
npm install --save-dev @types/axios

2. Configure Jest

Create or update the Jest configuration file to use ts-jest:

  • jest.config.js
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  setupFilesAfterEnv: ['./jest.setup.ts'],
};

3. Set Up TypeScript for Jest

You may need to create or update your tsconfig.json to ensure compatibility with Jest:

  • tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*.ts", "tests/**/*.ts"]
}

4. Write Your Tests

Create a test file, for example, api.test.ts, and use Axios to make HTTP requests and Jest to write assertions:

  • tests/api.test.ts
import axios from 'axios';

const API_URL = 'http://localhost:3000'; // Your API base URL

describe('API End-to-End Tests', () => {
  it('should return a list of items', async () => {
    const response = await axios.get(`${API_URL}/items`);
    expect(response.status).toBe(200);
    expect(response.data).toBeInstanceOf(Array);
  });

  it('should create a new item', async () => {
    const newItem = { name: 'Test Item' };
    const response = await axios.post(`${API_URL}/items`, newItem);
    expect(response.status).toBe(201);
    expect(response.data).toMatchObject(newItem);
  });

  it('should handle item not found', async () => {
    try {
      await axios.get(`${API_URL}/items/999999`);
    } catch (error) {
      expect(error.response.status).toBe(404);
    }
  });
});

5. Run Your Tests

Add a script to your package.json to run the tests:

  • package.json
"scripts": {
  "test": "jest"
}

Now you can run your tests using:

npm test

6. Optional: Set Up Jest Setup File

If you need to configure global settings or setup before each test, create a jest.setup.ts file:

  • jest.setup.ts
// You can set up global settings here, such as adding custom matchers or configuring environment variables.

This setup will allow you to write comprehensive E2E tests for your API using Jest, Axios, and TypeScript.