การทดสอบ Storybook และการถดถอยด้านภาพ
เรียกใช้ฟังก์ชัน play สำหรับการทดสอบการโต้ตอบ และผสานรวม Chromatic เพื่อเปรียบเทียบความแตกต่างของภาพ
การทดสอบ Storybook และการถดถอยด้านภาพ เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องทดสอบใน Storybook
Storybook 7 ขึ้นไปมาพร้อมกับ @storybook/test สำหรับการทดสอบการโต้ตอบ (ฟังก์ชันจำลองการโต้ตอบ) และผสานการทำงานกับ Chromatic เพื่อทดสอบการถดถอยทางภาพโดยอัตโนมัติ โดยไม่ต้องออกจากเครื่องมือสำรวจคอมโพเนนต์
ฟังก์ชันจำลองการโต้ตอบ
ฟังก์ชัน play จะทำงานหลังจากแสดงผลสตอรีแล้ว โดยจำลองการโต้ตอบของผู้ใช้ผ่านเครื่องมือของ @storybook/test ผลลัพธ์จะแสดงในแผงการโต้ตอบ
import { within, userEvent, expect } from '@storybook/test';
export const FilledForm: Story = {
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
await userEvent.type(canvas.getByLabelText('Email'), 'test@example.com');
await userEvent.click(canvas.getByRole('button', { name: /submit/i }));
await expect(canvas.getByText('Success!')).toBeInTheDocument();
},
};การตรวจยืนยันในฟังก์ชันจำลองการโต้ตอบ
ใช้ expect จาก @storybook/test (ซึ่งส่งออกซ้ำจาก Vitest/Jest) ภายในฟังก์ชันจำลองการโต้ตอบ เพื่อตรวจยืนยันสถานะของคอมโพเนนต์หลังการโต้ตอบ
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
const button = canvas.getByRole('button', { name: /add/i });
await userEvent.click(button);
await expect(canvas.getByText('1 item')).toBeInTheDocument();
await userEvent.click(button);
await expect(canvas.getByText('2 items')).toBeInTheDocument();
},การเรียกใช้การทดสอบสตอรีด้วยตัวเรียกใช้การทดสอบของ Storybook
แพ็กเกจ @storybook/test-runner จะแปลงทุกสตอรีที่มีฟังก์ชันจำลองการโต้ตอบให้เป็นการทดสอบ Jest คุณสามารถเรียกใช้การทดสอบเหล่านี้ใน CI ด้วยคำสั่งเดียว
# Install
npm install @storybook/test-runner --save-dev
# package.json
"test-storybook": "test-storybook"
# Run (requires Storybook to be running)
npm run test-storybookการทดสอบการถดถอยทางภาพคืออะไร
การทดสอบการถดถอยทางภาพจะบันทึกภาพหน้าจอของคอมโพเนนต์เป็นสแนปช็อต และแจ้งความแตกต่างระดับพิกเซลระหว่างคอมมิตต่าง ๆ Chromatic, Playwright และ Percy เป็นเครื่องมือยอดนิยม
การตั้งค่า Chromatic
Chromatic คือบริการคลาวด์อย่างเป็นทางการของ Storybook สำหรับการทดสอบภาพ ส่งสตอรีขึ้นระบบ แล้ว Chromatic จะเปรียบเทียบภาพหน้าจอกับเส้นฐานก่อนหน้า
# Install
npm install chromatic --save-dev
# Run (get project token from chromatic.com)
npx chromatic --project-token=<YOUR_TOKEN>
# CI: add to GitHub Actions
- name: Chromatic
run: npx chromatic --project-token=${{ secrets.CHROMATIC_TOKEN }}การตรวจสอบการเปลี่ยนแปลงทางภาพ
Chromatic จะแสดงหน้าจอเปรียบเทียบความแตกต่าง ซึ่งผู้ตรวจสอบสามารถยอมรับหรือปฏิเสธการเปลี่ยนแปลงทางภาพได้ การเปลี่ยนแปลงที่ยอมรับจะกลายเป็นเส้นฐานใหม่ ส่วนการเปลี่ยนแปลงที่ปฏิเสธจะขัดขวาง PR
การทดสอบด้วยสแนปช็อตใน Storybook
ตัวเรียกใช้การทดสอบยังสามารถเรียกใช้การตรวจสอบการเข้าถึงผ่าน @storybook/addon-a11y กับทุกสตอรีโดยอัตโนมัติใน CI ได้ด้วย
// .storybook/test-runner.ts
import { checkA11y } from 'axe-playwright';
export default {
async postVisit(page) {
await checkA11y(page, '#storybook-root', {
detailedReport: true,
});
},
};การประกอบ Storybook
ประกอบ Storybook หลายชุดจากคลังโค้ดต่าง ๆ ให้รวมอยู่ในส่วนติดต่อผู้ใช้เดียว ซึ่งมีประโยชน์สำหรับระบบการออกแบบที่ใช้ร่วมกันในหลายโครงการ
// .storybook/main.ts
refs: {
'design-system': {
title: 'Design System',
url: 'https://design-system.example.com',
},
},การทดสอบสตอรีแบบตอบสนอง
ใช้ส่วนเสริมขนาดพื้นที่แสดงผลเพื่อทดสอบสตอรีในขนาดมือถือ แท็บเล็ต และเดสก์ท็อป กำหนดขนาดพื้นที่แสดงผลในพารามิเตอร์ของสตอรีเพื่อล็อกสตอรีให้มีขนาดเฉพาะ
export const Mobile: Story = {
parameters: {
viewport: { defaultViewport: 'mobile1' },
},
args: { label: 'Mobile Button' },
};การป้องกันการทดสอบไม่เสถียร
หลีกเลี่ยงการทดสอบภาพที่ไม่เสถียรโดยใช้ delay ในฟังก์ชันจำลองการโต้ตอบเพื่อรอแอนิเมชัน หรือปิดใช้งานแอนิเมชันทั่วทั้งระบบในตัวอย่าง Storybook
// .storybook/preview.ts
export const parameters = {
chromatic: { disableSnapshot: false },
// Disable CSS animations for consistent screenshots
};
// Global CSS for tests:
// * { animation: none !important; transition: none !important; }รายงานความครอบคลุม
เรียกใช้ test-storybook --coverage เพื่อสร้างรายงานความครอบคลุมที่แสดงว่าบรรทัดใดของคอมโพเนนต์ถูกเรียกใช้โดยการทดสอบฟังก์ชันจำลองการโต้ตอบ
ตรวจสอบอย่างรวดเร็ว
ฟังก์ชันจำลองการโต้ตอบของ Storybook เรียกใช้การโต้ตอบของตนที่ใด
สรุปทบทวน
ฟังก์ชันจำลองการโต้ตอบจะทดสอบการโต้ตอบของคอมโพเนนต์ภายใน Storybook โดยใช้ @storybook/test ตัวเรียกใช้การทดสอบจะแปลงฟังก์ชันจำลองการโต้ตอบให้เป็นการทดสอบ Jest สำหรับ CI ส่วน Chromatic จะเพิ่มสแนปช็อตการถดถอยทางภาพ โดยแจ้งการเปลี่ยนแปลงส่วนติดต่อผู้ใช้ระดับพิกเซลเพื่อให้ตรวจสอบก่อนผสาน
คำถามที่พบบ่อย
บทเรียน “การทดสอบ Storybook และการถดถอยด้านภาพ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทดสอบ Storybook และการถดถอยด้านภาพ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทดสอบ Storybook และการถดถอยด้านภาพ”
เรียกใช้ฟังก์ชัน play สำหรับการทดสอบการโต้ตอบ และผสานรวม Chromatic เพื่อเปรียบเทียบความแตกต่างของภาพ คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การทดสอบ Storybook และการถดถอยด้านภาพ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า Storybook ในโปรเจกต์ React
- การเขียนสตอรี CSF3
- Args, Controls และส่วนเสริม Actions
- การทดสอบ Storybook และการถดถอยด้านภาพ