สวัสดีครับ ผมเป็นนักพัฒนาซอฟต์แวร์ที่ทำงานกับ AI API มาหลายปี ในบทความนี้ผมจะมาแบ่งปันประสบการณ์ตรงเกี่ยวกับการเขียนเทสต์สำหรับ MCP Tool ที่ใช้ LLM ซึ่งเป็นเทคนิคที่จะช่วยให้คุณทดสอบโค้ดได้เร็วขึ้นและประหยัดค่าใช้จ่ายได้มากเลยทีเดียว

MCP คืออะไร และทำไมต้องทดสอบ

MCP ย่อมาจาก Model Context Protocol เป็นมาตรฐานการเชื่อมต่อโมเดล AI กับแหล่งข้อมูลและเครื่องมือต่างๆ หลายคนอาจสงสัยว่าทำไมต้องทดสอบด้วย ในเมื่อเราก็เรียก API ได้เลย คำตอบคือการจำลองการเรียก LLM หรือที่เรียกว่า Mocking นั้นช่วยให้เราทดสอบได้โดยไม่ต้องเสียค่าใช้จ่ายจริง และทดสอบได้เร็วมากเพราะไม่ต้องรอการตอบกลับจากเซิร์ฟเวอร์

เริ่มต้นเตรียมโปรเจกต์

ก่อนอื่นให้สร้างโฟลเดอร์สำหรับโปรเจกต์ของเรา เปิด Terminal แล้วพิมพ์คำสั่งตามนี้

mkdir mcp-testing
cd mcp-testing
npm init -y

จากนั้นติดตั้งไลบรารีที่จำเป็นสำหรับการทดสอบ

npm install jest @holysheep-ai/sdk --save-dev

เขียนโค้ด MCP Tool พื้นฐาน

ให้สร้างไฟล์ชื่อ weatherTool.js ทำหน้าที่ดึงข้อมูลอากาศผ่าน LLM โดยใช้ HolySheep AI เป็น API หลัก ซึ่งมีความเร็วตอบกลับน้อยกว่า 50 มิลลิวินาที ทำให้การทดสอบรวดเร็วมาก

// weatherTool.js
const HolySheepAI = require('@holysheep-ai/sdk');

class WeatherTool {
  constructor(apiKey) {
    this.client = new HolySheepAI({
      baseURL: 'https://api.holysheep.ai/v1',
      apiKey: apiKey
    });
  }

  async getWeather(city) {
    const response = await this.client.chat.completions.create({
      model: 'gpt-4.1',
      messages: [
        {
          role: 'system',
          content: 'คุณเป็นผู้ช่วยพยากรณ์อากาศ ตอบเป็น JSON รูปแบบ: {temp: อุณหภูมิ, condition: สภาพอากาศ}'
        },
        {
          role: 'user',
          content: พยากรณ์อากาศของ ${city} วันนี้เป็นอย่างไร
        }
      ],
      temperature: 0.3
    });

    const result = response.choices[0].message.content;
    return JSON.parse(result);
  }
}

module.exports = WeatherTool;

การจำลองการเรียก LLM ด้วย Jest

ตอนนี้มาสร้างไฟล์เทสต์กันครับ ให้สร้างไฟล์ชื่อ weatherTool.test.js โดยใช้เทคนิค Mocking ที่จะจำลองการตอบกลับจาก LLM แทนการเรียกจริง

// weatherTool.test.js
const WeatherTool = require('./weatherTool');

// Mock HolySheep AI SDK
jest.mock('@holysheep-ai/sdk', () => {
  return jest.fn().mockImplementation(() => ({
    chat: {
      completions: {
        create: jest.fn()
      }
    }
  }));
});

describe('WeatherTool Tests', () => {
  let weatherTool;
  let mockClient;

  beforeEach(() => {
    jest.clearAllMocks();
    weatherTool = new WeatherTool('test-api-key');
    mockClient = weatherTool.client;
  });

  test('ควรแปลงข้อมูลอากาศเป็นรูปแบบที่ถูกต้อง', async () => {
    // จำลองการตอบกลับจาก LLM
    mockClient.chat.completions.create.mockResolvedValue({
      choices: [{
        message: {
          content: '{"temp": 28, "condition": "แดดร้อน"}'
        }
      }]
    });

    const result = await weatherTool.getWeather('กรุงเทพ');

    expect(result).toEqual({
      temp: 28,
      condition: 'แดดร้อน'
    });
    expect(mockClient.chat.completions.create).toHaveBeenCalledWith(
      expect.objectContaining({
        model: 'gpt-4.1'
      })
    );
  });

  test('ควรส่งชื่อเมืองไปยัง LLM อย่างถูกต้อง', async () => {
    mockClient.chat.completions.create.mockResolvedValue({
      choices: [{
        message: {
          content: '{"temp": 25, "condition": "ฝนตก"}'
        }
      }]
    });

    await weatherTool.getWeather('เชียงใหม่');

    expect(mockClient.chat.completions.create).toHaveBeenCalledWith(
      expect.objectContaining({
        messages: expect.arrayContaining([
          expect.objectContaining({
            content: expect.stringContaining('เชียงใหม่')
          })
        ])
      })
    );
  });
});

การตั้งค่า Jest Configuration

สร้างไฟล์ jest.config.js เพื่อกำหนดค่าการทดสอบ

// jest.config.js
module.exports = {
  testEnvironment: 'node',
  testMatch: ['**/*.test.js'],
  collectCoverage: true,
  coverageDirectory: 'coverage',
  verbose: true
};

รันเทสต์ด้วยคำสั่ง

npm test

เมื่อรันเทสต์สำเร็จ คุณจะเห็นผลลัพธ์สีเขียวแสดงว่าเทสต์ผ่านทั้งหมด

ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

กรณีที่ 1: ข้อผิดพลาด "Cannot find module @holysheep-ai/sdk"

สาเหตุ: ยังไม่ได้ติดตั้ง SDK หรือติดตั้งผิดชื่อ

วิธีแก้: ตรวจสอบว่าติดตั้ง SDK ถูกต้องแล้ว

npm install @holysheep-ai/sdk

กรณีที่ 2: ข้อผิดพลาด "Mock function was not called"

สาเหตุ: Mock ไม่ทำงานเพราะ import ผิดวิธี

วิธีแก้: ต้องใช้ jest.mock ก่อน require เสมอ

// ลำดับที่ถูกต้อง
jest.mock('@holysheep-ai/sdk', () => {
  return jest.fn().mockImplementation(() => ({
    chat: { completions: { create: jest.fn() } }
  }));
});

const WeatherTool = require('./weatherTool');

กรณีที่ 3: ข้อผิดพลาด "timeout of 5000ms exceeded"

สาเหตุ: Mock ไม่ได้คืนค่า Promise ทำให้ async function รอนานเกินไป

วิธีแก้: ต้องใช้ mockResolvedValue เสมอสำหรับ async function

// ผิด
mockClient.chat.completions.create.mockReturnValue({ data: 'test' });

// ถูก
mockClient.chat.completions.create.mockResolvedValue({
  choices: [{ message: { content: '{"test": true}' } }]
});

สรุป

การทดสอบ MCP Tool ด้วยการจำลอง LLM เป็นเทคนิคที่ทรงพลังมาก ช่วยให้เราพัฒนาและทดสอบได้อย่างมีประสิทธิภาพ โดยไม่ต้องกังวลเรื่องค่าใช้จ่ายหรือความเร็วของเครือข่าย จากประสบการณ์ของผม การใช้ HolySheep AI ร่วมกับการ Mocking ช่วยประหยัดค่าใช้จ่ายได้มากกว่า 85% เมื่อเทียบกับการใช้ OpenAI โดยตรง

HolySheep AI มีราคาที่คุ้มค่ามาก เช่น DeepSeek V3.2 เพียง $0.42 ต่อล้านโทเค็น และ Gemini 2.5 Flash เพียง $2.50 ต่อล้านโทเค็น รองรับการชำระเงินผ่าน WeChat และ Alipay พร้อมความเร็วในการตอบกลับน้อยกว่า 50 มิลลิวินาที ซึ่งเร็วกว่าผู้ให้บริการอื่นมาก

หากต้องการทดสอบจริงกับ API หลังจากผ่านการทดสอบด้วย Mocking แล้ว สามารถใช้ API Key จริงได้เลย โดยไม่ต้องแก้ไขโค้ดเพราะโครงสร้างคล้ายกันมาก

👉 สมัคร HolySheep AI — รับเครดิตฟรีเมื่อลงทะเบียน