APIエンドポイントの結合テスト
異なるコンポーネント間の連携を検証し、APIの機能が正常に動作することを確認する結合テストを実装します。
「APIエンドポイントの結合テスト」はCoddyKit上の無料Node.js Backend Development Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはNode.js Backend Development Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Node.js Backend Development Bootcampコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
What is Integration Testing?
Welcome! In this lesson, we'll dive into integration testing for Node.js API endpoints. Unlike unit tests (which test small, isolated pieces of code), integration tests verify that different parts of your application work together as expected.
For APIs, this means ensuring your endpoints correctly handle requests, interact with databases or other services, and return the right responses.
Why Test API Endpoints?
Your API is the main way external clients interact with your backend. Robust integration tests ensure:
- Endpoints respond with correct HTTP status codes.
- Data sent to the API is processed and stored properly.
- The API returns expected data formats (e.g., JSON).
- Different components (like routing, middleware, database) integrate seamlessly.
This helps catch bugs early that unit tests might miss.
Essential Testing Tools
To test our Node.js API endpoints, we'll use a couple of key tools:
- Jest: Our test runner and assertion library (introduced in Lesson 1).
- Supertest: A library designed to test HTTP servers. It makes it easy to send requests and assert responses.
- Express: Our web framework, for building the API itself.
Setting Up Supertest
First, let's install the necessary packages. We'll need express for our sample API, and jest and supertest for testing.
Run this command in your project terminal:
npm install --save-dev express jest supertestOur Simple Express App
Let's create a basic Express application that we can test. We'll define a few simple routes.
Notice we export the app instance, which Supertest will use to make requests directly, without needing to start a live server on a port.
const express = require('express');
const app = express();
// Middleware to parse JSON request bodies
app.use(express.json());
// A simple GET route
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
// A GET route that returns JSON
app.get('/data', (req, res) => {
res.json({ message: 'API data', version: 1.0 });
});
// A POST route that echoes the request body
app.post('/echo', (req, res) => {
res.json(req.body);
});
// Export the app for testing purposes
module.exports = app;
// Start the server only if not in a test environment
if (process.env.NODE_ENV !== 'test') {
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
}Testing a GET Endpoint
Now, let's write our first integration test. We'll use supertest to make a GET request to our root / endpoint and assert its response.
Create a file like app.test.js and add the following:
const request = require('supertest');
const app = require('./app'); // Import our Express app
describe('GET /', () => {
it('should return "Hello from Express!"', async () => {
const res = await request(app).get('/');
expect(res.statusCode).toEqual(200);
expect(res.text).toEqual('Hello from Express!');
});
});Asserting JSON Responses
APIs often return JSON data. Supertest makes it easy to access the parsed JSON body of a response using res.body.
Let's test our /data endpoint to ensure it returns the correct JSON object:
const request = require('supertest');
const app = require('./app');
describe('GET /data', () => {
it('should return JSON with message and version', async () => {
const res = await request(app).get('/data');
expect(res.statusCode).toEqual(200);
expect(res.type).toEqual('application/json');
expect(res.body).toEqual({ message: 'API data', version: 1.0 });
expect(res.body.message).toBe('API data');
});
});Testing POST Requests
Testing POST requests is similar, but we'll use .post() and often .send() to attach a request body.
Our /echo endpoint simply returns whatever JSON it receives. Let's test that functionality:
const request = require('supertest');
const app = require('./app');
describe('POST /echo', () => {
it('should echo the sent JSON data', async () => {
const testData = { name: 'Coddy', score: 95 };
const res = await request(app)
.post('/echo')
.send(testData);
expect(res.statusCode).toEqual(200);
expect(res.type).toEqual('application/json');
expect(res.body).toEqual(testData);
});
});Database Interactions & Cleanup
When testing APIs that interact with a database, you typically:
- Use a dedicated test database to prevent polluting your development data.
- Clear the database before each test suite or test case (using
beforeEach/afterEachhooks). - Seed data if specific data is needed for a test.
This ensures tests are independent and repeatable.
API Test Scenario
You're testing a Node.js API endpoint /users that accepts POST requests to create a new user. Which of the following statements are TRUE about integration testing this endpoint?
Recap: Integration Testing
Great job! You've learned the fundamentals of integration testing for Node.js API endpoints:
- What it is: Verifying components work together, especially for API requests.
- Tools: Using Supertest with Jest to simulate HTTP requests.
- Method: Sending GET/POST requests and asserting status codes, body content, and data types.
- Best Practices: Considering dedicated test databases for isolation.
This ensures your API is robust and reliable!
よくある質問
「APIエンドポイントの結合テスト」レッスンは無料ですか?
はい。「APIエンドポイントの結合テスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Node.js Backend Development Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Node.js Backend Development Bootcampコースには全4レッスンが含まれています。
「APIエンドポイントの結合テスト」で何を学びますか?
異なるコンポーネント間の連携を検証し、APIの機能が正常に動作することを確認する結合テストを実装します。 ブラウザで直接実行するハンズオンコードでNode.js Backend Development Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Node.js Backend Development Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのNode.js Backend Development Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「APIエンドポイントの結合テスト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このNode.js Backend Development Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのNode.js Backend Development Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Jestによるユニットテスト
- APIエンドポイントの結合テスト
- 効果的なデバッグ手法
- Node.jsのモックとテストダブル