0Pricing
React Academy · บทเรียน

การทดสอบ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การตั้งค่า Storybook ในโปรเจกต์ React
  2. การเขียนสตอรี CSF3
  3. Args, Controls และส่วนเสริม Actions
  4. การทดสอบ Storybook และการถดถอยด้านภาพ
← กลับไปที่ React Academy