Hướng Dẫn Kiểm Thử API HTTP trong Node.js với Supertest

Oliver Kingsley

Oliver Kingsley

14 tháng 8 2025

Hướng Dẫn Kiểm Thử API HTTP trong Node.js với Supertest

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

Trong bối cảnh API đang phát triển nhanh chóng, các nhóm cần hai điều: phản hồi nhanh ở cấp độ mã và xác thực đầu cuối đáng tin cậy trên các môi trường. Supertest mang lại điều đầu tiên—các khẳng định HTTP cực nhanh cho các dịch vụ Node.js. Và khi bạn sẵn sàng cộng tác giữa các vai trò, chạy các bài kiểm tra kịch bản, tạo giả lập các phụ thuộc và xuất bản tài liệu, một nền tảng kiểm thử API như Apidog sẽ hoàn thiện bức tranh. Hướng dẫn chính thức, khách quan này giải thích cách sử dụng Supertest để kiểm thử API, những ưu điểm của nó và cách kết hợp nó với Apidog để tăng tốc quá trình phân phối với sự tự tin.

Apidog
button

Supertest là gì?

Supertest là một thư viện Node.js nhẹ để kiểm thử các máy chủ HTTP. Nó được xây dựng dựa trên superagent và cho phép bạn viết các khẳng định rõ ràng đối với mã trạng thái, tiêu đề và nội dung phản hồi—mà không cần khởi tạo các máy khách bên ngoài. Nó lý tưởng khi bạn:

Khi bạn cần cộng tác, quản trị tuân thủ API, điều phối môi trường và kiểm thử trực quan, bạn sẽ bổ sung Supertest bằng một nền tảng kiểm thử API như Apidog. Phần còn lại của bài viết này sẽ chỉ ra cách thực hiện cả hai.

button

Cài đặt và Thiết lập Supertest

Bạn có thể cài đặt Supertest trong vài phút. Sử dụng npm, pnpm hoặc yarn:

# npm   npm install --save-dev supertest jest

# pnpm  pnpm add -D supertest jest

# yarn

yarn add -D supertest jest

Một API Express tối thiểu (app.js):

const express = require('express');

const app = express();



app.get('/greet', (req, res) => {

  const name = req.query.name || 'World';

  res.json({ message: `Hello, ${name}!` });

});



module.exports = app;

Một bài kiểm tra đơn giản (app.test.js) sử dụng Supertest + Jest:

const request = require('supertest');

const app = require('./app');



describe('GET /greet', () => {

  it('greets anonymously', async () => {

    const res = await request(app)

      .get('/greet')

      .expect('Content-Type', /json/)

      .expect(200);



    expect(res.body.message).toBe('Hello, World!');

  });



  it('greets by name', async () => {

    const res = await request(app)

      .get('/greet?name=Alice')

      .expect('Content-Type', /json/)

      .expect(200);



    expect(res.body.message).toBe('Hello, Alice!');

  });

});

Cập nhật package.json để chạy kiểm thử:

{

  "scripts": {

    "test": "jest"

  }

}

Chạy các bài kiểm thử của bạn:

npm test

Nếu bạn thích Mocha hoặc Vitest, Supertest hoạt động tương tự—API .expect() là giống hệt.


Viết các khẳng định Supertest hiệu quả

Sức mạnh của Supertest đến từ các khẳng định có thể nối chuỗi của nó—nhanh để viết và dễ đọc. Dưới đây là các mẫu bạn sẽ sử dụng hàng ngày:

request(app)

  .get('/users')

  .expect(200)

  .expect('Content-Type', /json/);
request(app)

  .get('/users')

  .expect(200)

  .expect(res => {

    if (!Array.isArray(res.body)) throw new Error('Expected an array');

    if (res.body.length === 0) throw new Error('Expected at least one user');

  });
request(app)

  .get('/health')

  .expect(200)

  .expect({ status: 'ok' });



request(app)

  .get('/health')

  .expect(200)

  .expect(/"status":"ok"/);
request(app)

  .post('/posts')

  .set('Authorization', 'Bearer test-token')

  .send({ title: 'Hello', body: 'World' })

  .expect(201)

  .expect(res => {

    if (!res.body.id) throw new Error('Missing id');

  });
const agent = request.agent(app);

await agent.get('/login').expect(200);

await agent.get('/me').expect(200).expect(res => {

  if (!res.body.user) throw new Error('Expected authenticated user');

});
Mẹo: Giữ các bài kiểm thử nhỏ và có tính xác định. Supertest xuất sắc trong việc xác thực các bộ điều khiển, middleware và bộ điều hợp một cách độc lập.

Supertest trong CI/CD và Monorepos

Để duy trì chất lượng nhất quán, hãy chạy Supertest trong CI cho mỗi yêu cầu kéo (pull request). Một thiết lập điển hình:

Ví dụ đoạn mã GitHub Actions:

name: api-tests

on: [push, pull_request]

jobs:

  test:

    runs-on: ubuntu-latest

    steps:

      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4

        with:

          node-version: '20'

      - run: npm ci

      - run: npm test -- --ci

Trong các monorepo, chỉ chạy các bài kiểm thử bị ảnh hưởng và lưu vào bộ nhớ cache node_modules để tăng tốc vòng lặp phản hồi. Chi phí tối thiểu của Supertest làm cho nó rất phù hợp với các cơ sở mã lớn.


Khi nào nên sử dụng Nền tảng kiểm thử API

Supertest rất tuyệt vời cho phản hồi nhanh, ở cấp độ mã. Nhưng thực tế sản xuất đòi hỏi nhiều hơn:

Đây là lúc một nền tảng kiểm thử API như Apidog tỏa sáng. Nó hợp nhất thiết kế API, giả lập, kiểm thử, gỡ lỗitài liệu để giữ các nhóm đồng bộ và các cổng chất lượng của bạn bền vững.

button
Giao diện người dùng kiểm thử Apidog

Tại sao Apidog bổ sung cho Supertest


Quy trình làm việc kết hợp: Supertest + Apidog

Sử dụng Supertest cho các kiểm tra tập trung vào nhà phát triển và Apidog cho cộng tác đầu cuối. Dưới đây là sự phân chia trách nhiệm thực tế:

Nhiệm vụ
Supertest
Apidog
Kiểm tra đơn vị bộ điều khiển/middleware
Tuyệt vời
Bổ sung
Hồi quy hợp đồng nhanh (trạng thái/tiêu đề)
Tuyệt vời
Tuyệt vời
Quản trị lược đồ (OpenAPI)
Thủ công
Hàng đầu
Máy chủ giả lập cho front-end
Hạn chế
Tích hợp sẵn
Các kịch bản dựa trên dữ liệu
Hạn chế
Hàng đầu
Điều phối CI trên các môi trường
Tốt
Hàng đầu
Cộng tác nhóm/tài liệu
Tối thiểu
Hàng đầu

Luồng ví dụ:


Các mẫu Supertest nâng cao

Một vài mẹo bổ sung mang lại hiệu quả:


Kết luận: Một cách tiếp cận cân bằng đối với chất lượng API

Các API chất lượng được xây dựng với cả tốc độ và sự chặt chẽ. Supertest cung cấp cho các nhà phát triển một cách nhanh chóng, biểu cảm để xác minh các điểm cuối gần mã—hoàn hảo cho các vòng lặp phản hồi chặt chẽ và phát hiện các hồi quy trước khi chúng thoát khỏi một nhánh. Nó đơn giản, đáng tin cậy và đã được thử nghiệm qua nhiều backend Node.js.

Tuy nhiên, khi các hệ thống phát triển, bạn cần sự cộng tác, quản trị hợp đồng và thực thi nhận biết môi trường. Đó là nơi Apidog—một nền tảng kiểm thử API tích hợp—nâng cao quy trình làm việc của bạn. Bằng cách hợp nhất thiết kế hợp đồng (OpenAPI), máy chủ giả lập, khẳng định trực quan, biến môi trường và điều phối CI, Apidog giúp các nhóm di chuyển đồng bộ từ ý tưởng đến phân phối. Front-end, back-end và QA có thể chia sẻ cùng một nguồn thông tin đáng tin cậy trong khi Supertest tiếp tục bảo vệ các đường dẫn mã của bạn bằng các khẳng định nhanh chóng, có tính xác định.

Nếu bạn muốn tốc độ tự tin, hãy sử dụng cả hai:

Cách tiếp cận cân bằng này tạo ra các API không chỉ đúng đắn hôm nay mà còn kiên cường khi sản phẩm của bạn phát triển. Hãy bắt đầu viết các kiểm tra Supertest của bạn ngay bây giờ—và đưa chúng vào hoạt động trong một quy trình sản xuất với Apidog.

button

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API