วิธีสร้าง Mocking API Calls ด้วย Jest: บทแนะนำฉบับสมบูรณ์

การ Mock API ด้วย Jest สำคัญมากสำหรับการทดสอบที่รวดเร็วและเชื่อถือได้ ใช้ไลบรารีเพื่อควบคุมการตอบสนองและอะแดปเตอร์

อาชว์

อาชว์

4 June 2025

วิธีสร้าง Mocking API Calls ด้วย Jest: บทแนะนำฉบับสมบูรณ์

เมื่อเขียนการทดสอบสำหรับโค้ดที่เรียก API นั้น สิ่งสำคัญคือต้องจำลองการเรียกเหล่านั้น เพื่อให้แน่ใจว่าการทดสอบของคุณมีความน่าเชื่อถือ รวดเร็ว และไม่ขึ้นอยู่กับบริการภายนอก Jest ซึ่งเป็นเฟรมเวิร์กการทดสอบ JavaScript ยอดนิยม มีหลายวิธีในการจำลองการเรียก API ในการทดสอบของคุณได้อย่างง่ายดาย มาเจาะลึกวิธีการต่างๆ ที่คุณสามารถใช้ได้

💡
คุณสามารถจำลอง API ได้ด้วยแอปพลิเคชันใดก็ได้ แต่คุณควรพิจารณาใช้แพลตฟอร์ม API ที่ดีที่สุดที่เรียกว่า Apidog!

Apidog เป็นแพลตฟอร์ม API แบบ low-code ที่ครอบคลุม ซึ่งช่วยให้นักพัฒนาได้รับฟังก์ชันการทำงานคุณภาพสูงสำหรับวงจรชีวิต API ทั้งหมด ด้วยเครื่องมือเพิ่มเติม เช่น การสร้างโค้ดอัตโนมัติ การผสานรวม CI/CD และสคริปต์ที่ปรับแต่งได้ สัมผัสประสบการณ์การพัฒนา API ระดับมืออาชีพภายในแพลตฟอร์มเดียว!

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Apidog โปรดคลิกปุ่มด้านล่าง!

การใช้ jest.mock()

วิธีหนึ่งในการจำลองการเรียก API ใน Jest คือการใช้ฟังก์ชัน jest.mock() เพื่อจำลองโมดูลทั้งหมดที่ทำการร้องขอ API นี่คือตัวอย่าง:

// api.js
import axios from 'axios';

export const getUsers = () => {
  return axios.get('/users');
};
// api.test.js
import axios from 'axios';
import { getUsers } from './api';

jest.mock('axios');

test('getUsers returns data from API', async () => {
  const users = [{ id: 1, name: 'John' }];
  axios.get.mockResolvedValueOnce({ data: users });
  
  const result = await getUsers();
  
  expect(axios.get).toHaveBeenCalledWith('/users');
  expect(result.data).toEqual(users);
});

ในตัวอย่างนี้ เราใช้ jest.mock('axios') เพื่อจำลองโมดูล axios ทั้งหมดโดยอัตโนมัติ จากนั้นเราใช้ axios.get.mockResolvedValueOnce() เพื่อจำลองการตอบสนองสำหรับการเรียก axios.get ครั้งถัดไป การทดสอบของเราสามารถตรวจสอบได้ว่า API ถูกเรียกอย่างถูกต้องและส่งคืนข้อมูลที่จำลอง 1

การใช้ Manual Mocks

อีกวิธีหนึ่งคือการจำลองโมดูลที่ทำการเรียก API ด้วยตนเองโดยการสร้างโฟลเดอร์ __mocks__ และใส่ไฟล์การใช้งานจำลองไว้ข้างใน:

// __mocks__/axios.js
export default {
  get: jest.fn(() => Promise.resolve({ data: {} })),
  post: jest.fn(() => Promise.resolve({ data: {} })),
  // ...
};

ตอนนี้ในการทดสอบของคุณ คุณสามารถจำลองการตอบสนองที่แตกต่างกันสำหรับการทดสอบแต่ละครั้ง:

// api.test.js
import axios from 'axios';
import { getUsers } from './api';

jest.mock('axios');

test('getUsers returns data from API', async () => {
  const users = [{ id: 1, name: 'John' }];
  axios.get.mockResolvedValueOnce({ data: users });
  
  const result = await getUsers();
  
  expect(axios.get).toHaveBeenCalledWith('/users');
  expect(result.data).toEqual(users);
});

ด้วยการจำลองด้วยตนเองนี้ คุณสามารถควบคุมได้อย่างเต็มที่ในการจำลองวิธีการ Axios ที่แตกต่างกัน เช่น get, post เป็นต้น ด้วยการใช้งานของคุณเอง 2

การใช้ Axios-mock-adapter

คุณสามารถใช้ไลบรารีเพื่อจำลองคำขอ Axios ได้อย่างละเอียดมากขึ้น ก่อนอื่น ให้ติดตั้ง:

npm install axios-mock-adapter --save-dev

จากนั้นในการทดสอบของคุณ:

// api.test.js
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import { getUsers } from './api';

describe('getUsers', () => {
  let mock;
  
  beforeAll(() => {
    mock = new MockAdapter(axios);
  });
  
  afterEach(() => {  
    mock.reset();
  });
  
  test('returns users data', async () => {
    const users = [{ id: 1, name: 'John' }];
    mock.onGet('/users').reply(200, users);
    
    const result = await getUsers();
    
    expect(result.data).toEqual(users);  
  });
});

ด้วย axios-mock-adapter คุณสามารถจำลองคำขอตาม URL, พารามิเตอร์, ส่วนหัว และอื่นๆ ได้ คุณยังสามารถจำลองข้อผิดพลาดและการหมดเวลาได้

การฉีดอินสแตนซ์ Axios ที่จำลอง

หากโค้ดของคุณใช้ axios โดยตรง อีกทางเลือกหนึ่งคือการฉีดอินสแตนซ์ axios ที่จำลองลงในโค้ดของคุณในระหว่างการทดสอบ:

// api.js
import axios from 'axios';

export const getUsers = () => {
  return axios.get('/users');
};
// api.test.js
import axios from 'axios';
import { getUsers } from './api';

jest.mock('axios', () => ({
  get: jest.fn(),
}));

test('getUsers returns data from API', async () => {
  const users = [{ id: 1, name: 'John' }];
  axios.get.mockResolvedValueOnce({ data: users });
  
  const result = await getUsers();
  
  expect(axios.get).toHaveBeenCalledWith('/users');
  expect(result.data).toEqual(users);
});

ที่นี่เราจำลอง axios เอง ไม่ใช่ทั้งโมดูล และจัดเตรียมฟังก์ชัน get ที่จำลองของเราเอง

เคล็ดลับสำหรับการจำลองการเรียก API

นี่คือเคล็ดลับบางประการที่ควรคำนึงถึงเมื่อจำลองการเรียก API ใน Jest:

จำลอง API ด้วย Apidog

หากคุณต้องการลองประสบการณ์การพัฒนา API ที่แตกต่างกัน คุณสามารถพิจารณาใช้ Apidog ได้!

apidog interface
button

Apidog เป็นแพลตฟอร์ม API แบบ low-code ที่ช่วยให้นักพัฒนาได้รับอินเทอร์เฟซผู้ใช้ที่เรียบง่ายและใช้งานง่ายสำหรับการพัฒนา API ด้วย Apidog คุณสามารถสร้าง ทดสอบ จำลอง และจัดทำเอกสาร API มาดู Apidog ให้ละเอียดยิ่งขึ้น!

Apidog Smart Mock

apidog smart mock

ให้ Apidog สร้างข้อมูลจำลองที่สมจริงโดยอัตโนมัติโดยไม่ต้องมีการกำหนดค่าด้วยตนเอง หากคุณไม่มีกฎการจำลองที่แน่นอน

Apidog Advanced Mock

apidog advanced mock
button

แก้ไขการตอบสนอง API ด้วยสคริปต์แบบกำหนดเองเพื่อจำลองการโต้ตอบในชีวิตจริงระหว่างฝั่งไคลเอนต์และเซิร์ฟเวอร์

Apidog Cloud Mock

apidog cloud mock

ทำงานร่วมกับทีมของคุณด้วยคุณสมบัติ cloud mock ผ่านที่อยู่คงที่ ซึ่งสามารถเข้าถึงได้บนเซิร์ฟเวอร์ cloud mock

บทสรุป

การจำลองเป็นทักษะพื้นฐานสำหรับการเขียนการทดสอบที่ดี โดยเฉพาะอย่างยิ่งเมื่อต้องรับมือกับ dependencies ภายนอก เช่น การเรียก API Jest มีหลายวิธีในการจำลองการเรียก API ในการทดสอบของคุณ ตั้งแต่การจำลองโมดูลทั้งหมดด้วย jest.mock() ไปจนถึงการจำลองโมดูลด้วยตนเอง ไปจนถึงการใช้ไลบรารีเช่น axios-mock-adapter สำหรับกรณีขั้นสูงมากขึ้น สิ่งสำคัญคือการเลือกแนวทางที่เหมาะสมกับความต้องการของคุณ ในขณะที่ทำให้การทดสอบของคุณเป็นอิสระและเน้นที่โค้ดที่กำลังทดสอบ ไม่ใช่รายละเอียดการใช้งานของ API ด้วยเทคนิคการจำลองเหล่านี้ในชุดเครื่องมือของคุณ คุณสามารถเขียนการทดสอบที่ยืดหยุ่นสำหรับโค้ดที่ขึ้นอยู่กับ API ได้

Explore more

วิธีเรียกใช้ Mistral Small 3.1 ในเครื่องของคุณเองโดยใช้ Ollama: คู่มือทีละขั้นตอน

วิธีเรียกใช้ Mistral Small 3.1 ในเครื่องของคุณเองโดยใช้ Ollama: คู่มือทีละขั้นตอน

เรียนรู้วิธีรัน Mistral Small 3.1 (AI โอเพนซอร์ส) บนเครื่องคุณเองด้วย Ollama คู่มือนี้ง่าย ครอบคลุมการติดตั้ง, การใช้งาน, และเคล็ดลับ

19 March 2025

NDJSON 101: การสตรีมผ่าน HTTP Endpoints

NDJSON 101: การสตรีมผ่าน HTTP Endpoints

ค้นพบ NDJSON: สตรีมข้อมูลผ่าน HTTP อย่างมีประสิทธิภาพ! คู่มือนี้อธิบายพื้นฐาน, ข้อดีเหนือ JSON, และวิธี Apidog ช่วยทดสอบ/แก้จุดบกพร่อง endpoint สตรีมมิ่ง

18 March 2025

วิธีนำเข้า/ส่งออกข้อมูลคอลเลกชันใน Postman

วิธีนำเข้า/ส่งออกข้อมูลคอลเลกชันใน Postman

ในบทความนี้ เราจะคุยเรื่องนำเข้า/ส่งออก Postman และวิธีแก้ปัญหาที่ยืดหยุ่นกว่า ไม่จำกัดจำนวนครั้ง

18 March 2025

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API