Node JS
  • SetUp Node&NVM
  • Folder Structure
  • Setup NodeJS Project
  • Library
    • Awilix
    • Swagger
    • Express
    • Jest
      • Supertest
    • Prettier
    • Eslint & Tslint
      • Tslint & Prettier
      • Tslint Plugin Prettier
      • Config With Airbnb
    • Husky And Friends
    • Sentry
  • INFRASTRUCTURE
    • Docker
      • Docker image
      • Docker container
      • Docker Volume
      • Docker command
      • Docker Compose
      • Problem & Solution
    • SonarQube
      • How to use in Nodejs
    • NGinX
    • ดูเพิ่มเติม
  • Note
    • .env declare type
    • Learn Link
Powered by GitBook
On this page
  • Jest + Supertest ทำงานร่วมแล้วจะเป็นไง?
  • install
  1. Library
  2. Jest

Supertest

Node.js library ที่ Provide High-level Fluent API ให้เราสามารถทำ API Testing ได้อย่างง่ายๆ มี syntax ในการเขียนเทสที่ทำให้เราอ่านเข้าใจได้ง่าย และยังสามารถทำงานร่วมกันได้ดีกับ Node.js Server Side App.

Jest + Supertest ทำงานร่วมแล้วจะเป็นไง?

เราสามารถนำโค้ดของ API Test ที่เขียนด้วย “Supertest” มารันอยู่บน Jest Test Runner ได้อย่างง่ายๆ เลย ซึ่งจะทำให้เทสของคุณได้ Benefits หลายๆ อย่างเช่น

  • Automatic Parallel API Test by Jest: รันเทสแบบ parallel by default ซึ่งช่วยประหยัดเวลากันรันเทสได้มาก

  • Integrated with popular Javascript Compiler อย่าง Babel, Webpack ได้ เพื่อที่จะสามารถใช้ syntax ใหม่ๆ ของ ES เวอร์ชันใหม่ๆ ได้

  • Many Test Reports and plugins available มี Test Report ให้เราเลือกใช้ได้อย่างหลาย เช่น Junit, HTML Report

install

 npm i --dev-save supertest @types/supertest
#client.ts
import supertest from 'supertest';
import { addMsg } from 'jest-html-reporters/helper';
import { toCurl } from 'request-to-curl';

const request = supertest.agent('https://reqres.in/api');
request.on('response', async (response) => {
    const { request, body, statusCode, headers } = response;
    const data = {
      request: {
        header: request._header,
        url: request.url,
        body: request._data,
        method: request.method,
        curl: request.req.toCurl()
      },
      response: {
        header: headers,
        status: statusCode,
        body,
      }
    }
    await addMsg(JSON.stringify(data, null, 2));
});

export default request;
import request from './client';

describe('Users', () => {
  describe('List Users', () => {
    it('list all users', () => {
      return request.get('/users').expect(200);
    });
    it('gets user by id', async () => {
      return request.get('/users/2')
        .expect(200)
        .then(response => {
          expect(response.body.data.first_name).toEqual('Janet')
        });
    });
  });

  describe('Create User', () => {
    it('create new user failure', () => {
      return request.post('/users')
        .send({
          name: 'nottyo',
          job: 'developer'
        })
        .expect(201);
    });
  })
});

จะเห็นได้ว่าการเขียน API Test ด้วย “Supertest” นั้นจะเป็นลักษณะ Chaining Calls ไปเรื่อยๆ เช่น request.get(‘/users’).expect(200) แบบนี้ได้เลย ดูใช้งานง่ายมากๆ เลยว่ามั้ยครับ ซึ่ง Supertest รองรับการทำ API Test ทุกรูปแบบ HTTP

PreviousJestNextPrettier

Last updated 3 years ago

โดย Spertest อนุญาตให้เรา listen to event ต่างๆ ได้ (เช่น error, response event) ดังนั้นผมจึงทำการ listen response event ไว้เพื่อที่จะเอาไว้ log http request/response ลงไปใน Test Report อีกที (เผื่อเอาไว้ใช้ debug ในกรณีที่ที่เกิด test failed) นอกจากนี้ผมยังใช้ Library เสริมอย่าง เพื่อใช้ทำการแปลง http request เป็น curl command เผื่อว่าจะเอาไปใช้ call ผ่าน curl ทีหลังได้อีกที

request-to-curl