@testing-library/vue: การเมานต์คอมโพเนนต์
เมานต์คอมโพเนนต์ Vue ด้วย @testing-library/vue ส่ง props และปลั๊กอินส่วนกลาง จำลองเหตุการณ์ของผู้ใช้ และตรวจสอบ template ที่เรนเดอร์แล้ว
@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 jsdomrender() สำหรับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า Jest และการเขียนเทสต์พื้นฐาน
- @testing-library/react: render และ userEvent
- @testing-library/vue: การเมานต์คอมโพเนนต์
- การจำลองโมดูลและการเรียก API