Frontend Academy · บทเรียน

@testing-library/vue: การเมานต์คอมโพเนนต์

เมานต์คอมโพเนนต์ Vue ด้วย @testing-library/vue ส่ง props และปลั๊กอินส่วนกลาง จำลองเหตุการณ์ของผู้ใช้ และตรวจสอบ template ที่เรนเดอร์แล้ว

บทเรียน 3 จาก 413 ขั้นตอน

@testing-library/vue: การเมานต์คอมโพเนนต์ เป็นบทเรียน Frontend Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Frontend Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน

Testing Library สำหรับ Vue

@testing-library/vue มอบแนวทางการทดสอบที่ยึดผู้ใช้เป็นศูนย์กลางแบบเดียวกันสำหรับคอมโพเนนต์ Vue 3 API มีรูปแบบคล้ายกับรุ่น React ได้แก่ render(), ฟังก์ชันค้นหาของ screen, userEvent และตัวตรวจสอบของ jest-dom

การติดตั้ง

ติดตั้งแพ็กเกจไลบรารีสำหรับทดสอบของ Vue

npm install -D @testing-library/vue @testing-library/user-event @testing-library/jest-dom
# Also install vitest for a Vite project:
npm install -D vitest jsdom

render() สำหรับ Vue

render(Component, options) เมานต์คอมโพเนนต์ Vue ใช้ออบเจ็กต์ options เพื่อส่งพร็อพ ปลั๊กอินส่วนกลาง และตัวเลือกการตั้งค่า

import { render, screen } from '@testing-library/vue';
import Button from './Button.vue';

test('renders button label', () => {
  render(Button, { props: { label: 'Submit' } });
  expect(screen.getByRole('button', { name: 'Submit' })).toBeInTheDocument();
});

การส่งพร็อพ

ส่งพร็อพในออบเจ็กต์ options TypeScript จะตรวจสอบชนิดของพร็อพ หากคุณใช้ defineProps<T>()

render(UserCard, {
  props: {
    user: { id: 1, name: 'Alice', email: 'alice@example.com' }
  }
});

การจัดเตรียมปลั๊กอินส่วนกลาง

ส่งการกำหนดค่าส่วนกลาง (ปลั๊กอิน คอมโพเนนต์ และค่าที่จัดเตรียมไว้) ในตัวเลือก global

import { createPinia } from 'pinia';
import router from './router';

render(App, {
  global: {
    plugins: [createPinia(), router],
    provide: { theme: 'dark' }
  }
});

ตัวช่วย renderWithPlugins ที่ใช้ซ้ำได้

สร้างตัวครอบ render แบบกำหนดเองที่รวมปลั๊กอินทั้งหมดที่จำเป็นสำหรับการทดสอบ เพื่อหลีกเลี่ยงการเขียนการตั้งค่าซ้ำในทุกการทดสอบ

// test-utils.ts
import { render } from '@testing-library/vue';
import { createPinia } from 'pinia';

export function renderWithSetup(component: any, options = {}) {
  return render(component, {
    global: { plugins: [createPinia()] },
    ...options
  });
}

การทดสอบเหตุการณ์

ใช้ userEvent เพื่อโต้ตอบกับคอมโพเนนต์ จากนั้นยืนยันสิ่งที่ผู้ใช้เห็น หรือยืนยันว่าเหตุการณ์ที่ส่งออกเกิดขึ้น

import userEvent from '@testing-library/user-event';

test('emits submit on form submit', async () => {
  const user = userEvent.setup();
  const { emitted } = render(LoginForm);

  await user.type(screen.getByLabelText('Email'), 'alice@example.com');
  await user.click(screen.getByRole('button', { name: /login/i }));

  expect(emitted().submit[0]).toEqual([{ email: 'alice@example.com' }]);
});

การทดสอบสล็อต

ส่งเนื้อหาของสล็อตเป็นสตริงหรือคอมโพเนนต์ในตัวเลือกของ render

render(Card, {
  slots: {
    default: '<p>Card body content</p>',
    header: '<h2>My Card Title</h2>'
  }
});

expect(screen.getByText('Card body content')).toBeInTheDocument();

การทดสอบพฤติกรรมของ v-model

กรอกข้อมูลลงในช่องด้วย userEvent แล้วตรวจสอบเหตุการณ์ที่ส่งออก หรือยืนยันว่าผลลัพธ์ที่แสดงตรงกับสถานะที่อัปเดตตามคาด

การทดสอบคลังสถานะ Pinia

สร้างอินสแตนซ์ Pinia ใหม่สำหรับการทดสอบแต่ละรายการ แก้ไขสถานะของคลังสถานะโดยตรงเพื่อเตรียมการทดสอบ จากนั้นยืนยันผลลัพธ์ที่แสดง

const pinia = createPinia();
render(Counter, { global: { plugins: [pinia] } });

const store = useCounterStore();
store.count = 5; // set initial state
await nextTick();

expect(screen.getByText('5')).toBeInTheDocument();

การค้นหาองค์ประกอบหลังการอัปเดตแบบอะซิงก์

Vue อัปเดต DOM แบบอะซิงก์ ใช้ await nextTick() หรือการค้นหาแบบ findBy* หลังจากเรียกใช้เหตุการณ์ที่ทำให้สถานะเปลี่ยนแปลงแบบอะซิงก์

import { nextTick } from 'vue';

await user.click(button);
await nextTick();
expect(screen.getByText('Updated!')).toBeInTheDocument();

ตรวจสอบความเข้าใจ

คุณจะส่ง Pinia หรือ Vue Router ให้กับคอมโพเนนต์ที่กำลังทดสอบด้วย @testing-library/vue ได้อย่างไร?

ทบทวน: @testing-library/vue

render(Component, options) เมานต์คอมโพเนนต์ Vue ส่งพร็อพใน options.props จัดเตรียมปลั๊กอินใน global.plugins ใช้ emitted() เพื่อตรวจสอบเหตุการณ์ที่กำหนดเอง ส่งสล็อตใน options.slots ใช้ await nextTick() สำหรับการอัปเดตแบบอะซิงก์ของ Vue สร้างตัวครอบ renderWithSetup() แบบกำหนดเองสำหรับการตั้งค่าปลั๊กอินที่ใช้ร่วมกัน

เริ่มต้นได้ฟรี

เรียนรู้ HTML ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
41
บทเรียน
163

คำถามที่พบบ่อย

บทเรียน “@testing-library/vue: การเมานต์คอมโพเนนต์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “@testing-library/vue: การเมานต์คอมโพเนนต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Frontend Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “@testing-library/vue: การเมานต์คอมโพเนนต์”

เมานต์คอมโพเนนต์ Vue ด้วย @testing-library/vue ส่ง props และปลั๊กอินส่วนกลาง จำลองเหตุการณ์ของผู้ใช้ และตรวจสอบ template ที่เรนเดอร์แล้ว คุณปฏิบัติ Frontend Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Frontend Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Frontend Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “@testing-library/vue: การเมานต์คอมโพเนนต์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Frontend Academy นี้ได้ไหม

ได้ บทเรียน Frontend Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า Jest และการเขียนเทสต์พื้นฐาน
  2. @testing-library/react: render และ userEvent
  3. @testing-library/vue: การเมานต์คอมโพเนนต์
  4. การจำลองโมดูลและการเรียก API
← กลับไปที่ Frontend Academy