원본 게시: souvikinator.xyz
API 엔드포인트에 대한 단위 테스트를 설정하는 방법은 다음과 같습니다.
우리는 다음 NPM 패키지를 사용할 것입니다:
다음을 사용하는 VS 코드 확장:
npm install express
npm install -D jest supertest
디렉토리 구조는 다음과 같습니다.
package.json을 잊지 마세요
{ "name": "api-unit-testing", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "jest api.test.js", "start":"node server.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "express": "^4.18.1" }, "devDependencies": { "jest": "^28.1.2", "supertest": "^6.2.3" } }
/post 엔드포인트에 본문과 제목이 있는 POST 요청을 수락하는 고속 서버입니다. 둘 중 하나라도 누락되면 상태 400 Bad Request가 반환됩니다.
// app.js const express = require("express"); const app = express(); app.use(express.json()); app.post("/post", (req, res) => { const { title, body } = req.body; if (!title || !body) return res.sendStatus(400).json({ error: "title and body is required" }); return res.sendStatus(200); }); module.exports = app;
const app = require("./app"); const port = 3000; app.listen(port, () => { console.log(`http://localhost:${port} ?`); });
supertest와 함께 사용하기 위해 Express 앱을 내보냅니다. 다른 HTTP 서버 프레임워크에서도 동일한 작업을 수행할 수 있습니다.
// api.test.js const supertest = require("supertest"); const app = require("./app"); // express app describe("Creating post", () => { // test cases goes here });
Supertest는 서버 운영과 요청을 대신 처리하고 우리는 테스트에 집중합니다.
express 앱은 supertest 에이전트로 전달되고 express를 임의의 사용 가능한 포트에 바인딩합니다. 그런 다음 원하는 API 엔드포인트에 HTTP 요청을 보내고 응답 상태를 예상과 비교할 수 있습니다.
const response = await supertest.agent(app).post("/post").send({ title: "Awesome post", body: "Awesome post body", });
3가지 사례에 대한 테스트를 만들겠습니다.
test("creating new post when both title and body are provided", async () => { const response = await supertest.agent(app).post("/post").send({ title: "Awesome post", body: "Awesome post body", }); // comparing response status code with expected status code expect(response.statusCode).toBe(200); });
test("creating new post when either of the data is not provided", async () => { const response = await supertest.agent(app).post("/post").send({ title: "Awesome post", }); expect(response.statusCode).toBe(400); });
test("creating new post when no data is not provided", async () => { const response = await supertest.agent(app).post("/post").send(); expect(response.statusCode).toBe(400); });
최종 코드는 다음과 같습니다.
const supertest = require("supertest"); const app = require("./app"); // express app describe("Creating post", () => { test("creating new post when both title and body are provided", async () => { const response = await supertest.agent(app).post("/post").send({ title: "Awesome post", body: "Awesome post body", }); expect(response.statusCode).toBe(200); }); test("creating new post when either of the data is not provided", async () => { const response = await supertest.agent(app).post("/post").send({ title: "Awesome post", }); expect(response.statusCode).toBe(400); }); test("creating new post when no data is not provided", async () => { const response = await supertest.agent(app).post("/post").send(); expect(response.statusCode).toBe(400); }); });
다음 명령을 사용하여 테스트를 실행하세요.
npm run test
jest 및 jest runer와 같은 VS Code 확장을 사용하면 작업이 자동으로 수행됩니다.
이것이 API 엔드포인트를 쉽게 테스트할 수 있는 방법입니다. ?
위 내용은 Jest와 Supertest를 사용하여 REST API 테스트하기 ✅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!