초보자를 위한 Jest 튜토리얼: SuperTest 또는 API 테스트 [4/4]

소개



시리즈의 이 부분에서는 API 테스트의 기본 사항에 대해 설명합니다.

실습 코드는 내GitHub Repository에서 사용할 수 있습니다.

테스트 API는 매우 불편한 과정을 극복하기 위해 Node.js에서 supertest라는 라이브러리를 도입했습니다. 개발자는 SuperTest를 독립 실행형 라이브러리로 사용하거나 Jest 또는 Mocha와 같은 JavaScript 테스트 프레임워크와 함께 사용할 수 있습니다.

프로젝트에서 SuperTest 구성



SuperTest를 npm 모듈로 설치하고 package.json 파일에 개발 종속성으로 저장합니다.

npm install supertest --save-dev


설치 후 이제 간단히 호출하여 supertest를 참조할 수 있습니다require('supertest');.

supertest를 시작하기 전에 시리즈의 이 부분에서 제공되는 코드를 시각화하고 이해하는 데 도움이 되는 디렉토리 구조를 공유하고 싶습니다.

디렉토리 구조

SuperTest 시작하기



API를 테스트하려면 먼저 API를 만든 다음 API에 다른 테스트를 추가로 적용해야 합니다.

아래와 같이 index.js 파일에 API를 생성했습니다.
index.js

const express = require("express")
const app = express();
app.use(express.json());

const users = []
app.get('/users',(req,res)=>{
    res.send(users);
})

app.post('/create-user',(req,res)=>{
    const {name,password} = req.body;
    users.push(req.body)
    res.send(req.body);
})

module.exports = app;


참고: 모든 것을 단일 파일에 작성해야 하고 데이터베이스 대신 배열을 사용해야 한다는 것을 눈치채셨을 수도 있습니다. 코드를 간단하고 이해하기 쉽게 만들기 위해 이 모든 작업을 수행했습니다.

생성된 API가 제대로 작동하는지 테스트하기 위해 Thunder 클라이언트(vs 코드 확장)를 사용했습니다. 먼저 포스트 API를 사용하여 동일한 데이터를 게시해야 합니다. 그런 다음 아래 스냅과 같이 게시된 데이터를 얻었습니다.



이제 API를 생성한 후 원하는 대로 테스트 케이스를 작성합니다.
참고: app.liste()에서 index.js를 분리하는 데 주의하십시오. 테스트를 실행할 때마다 index.js에서 index.js로 앱 모듈을 가져왔기 때문에 api.test.js 파일이 호출됩니다.
따라서 가장 좋은 방법은 index.js에서 앱 모듈을 내보내고 내 경우에는 server.js를 사용하고 거기에서 app.listen()를 사용하는 다른 파일로 가져오는 것입니다.

api.test.js

const request = require('supertest');
const app = require("../index");

describe('GET APIs', () => {
    test('It get all users', async () => {
        let result = await request(app).get('/users')
        expect(result.body.length).toBeGreaterThanOrEqual(0)
        expect(result.statusCode).toBe(200)
    })
})
describe('POST APIs', () => {
    test('It should create user', async () => {
        let result = await request(app).post('/create-user')
            .send({
                username: "Abid",
                password: "1234"
            })

        expect(result.body).toEqual({
            username: "Abid",
            password: "1234"
        })
        expect(result.statusCode).toBe(200);

    })
})


테스트 케이스를 작성한 후 다음 명령으로 테스트를 실행하십시오.

npm test // this command will test all test-cases in  all test-suites


테스트 결과는 다음과 같습니다.

 PASS  __test__/sum.test.js    
 PASS  __test__/index.test.js
 PASS  __test__/api.test.js

Test Suites: 3 passed, 3 total
Tests:       1 skipped, 4 passed, 5 total
Snapshots:   0 total
Time:        3.565 s


이것은 API 테스트의 기본 사항이며 삭제 및 업데이트를 위해 직접 수행하십시오.

결론



describe 함수를 사용하여 모든 GET API를 단일 그룹으로 결합하면 가독성이 향상됩니다. 다른 모든 HTTP 메소드에 대해 수행하십시오.


새로운 개념을 탐구하고 다른 사람들과 공유하는 것이 저의 열정이며 사람들을 돕고 영감을 주는 것이 저에게 기쁨입니다. 질문이 있으시면 언제든지 문의해 주세요!

, 및 GitHub에 연결

모든 사람이 개선할 여지가 있다는 것을 알고 있으므로 귀하의 제안에 감사드립니다. 그리고 새로운 것을 알고 싶습니다(❤️).

좋은 웹페이지 즐겨찾기