برنامه نویسی

راهنمای اشکال زدایی بصری با Vitest Preview

نوشته شده توسط Eze Sunday✏️

اشکال زدایی بصری به توسعه دهندگان این امکان را می دهد که اجرای کد خود را در زمان واقعی مشاهده کنند و شناسایی و رفع مشکلات را آسان تر می کند. به ویژه هنگام کار با پایگاه های کد پیچیده با چندین قطعه متحرک مفید است.

قبل از استفاده از Vitest Preview برای تست و اشکال‌زدایی بصری، توصیه می‌شود که تجربه آزمایش واحد با استفاده از Vitest یا چارچوب‌های تست مشابه مانند Jest را داشته باشید. اگر در تست واحد با Vitest تازه کار هستید، ما یک راهنمای مبتدی نوشته‌ایم که نشان می‌دهد چگونه یک برنامه frontend را با Vitest آزمایش کنید. این راهنما به شما کمک می کند تا درک بهتری از تست واحد و نحوه اعمال آن در پروژه های خود به دست آورید.

پرش به جلو:

چرا اشکال زدایی بصری مهم است؟

اشکال زدایی بصری به چند دلیل مهم است. اول، به شما کمک می کند تا خطاها را مشخص کنید. اشکال زدایی بصری تشخیص دقیق منبع خطاها و اشکالات در کد را آسان تر می کند و در زمان و تلاش شما هنگام تلاش برای رفع مشکلات صرفه جویی می کند.

اشکال زدایی بصری به توسعه دهندگان این امکان را می دهد که ببینند کد آنها چگونه با سایر بخش های سیستم تعامل دارد و بینش ارزشمندی را در مورد رفتار آن ارائه می دهد. علاوه بر این، اشکال زدایی بصری به توسعه دهندگان کمک می کند تا مشکلات عملکرد بالقوه را در کد خود شناسایی کنند و به آنها امکان می دهد آن را برای عملکرد بهتر بهینه کنند.

با آسان کردن شناسایی و رفع مشکلات، اشکال زدایی بصری به توسعه دهندگان کمک می کند تا بهره وری و کارایی خود را افزایش دهند. به طور کلی، این یک ابزار ضروری برای اطمینان از قابلیت اطمینان و صحت نرم افزار است.

معرفی Vitest

Vitest یک چارچوب تست واحد جدید است که برای سرعت ساخته شده است. مطابق با آنتونی فو، خالق Vitest و عضو اصلی تیم Vite:

درست مانند نحوه عملکرد Vite در مرورگر، Vitest نیز نمودار ماژول های شما را می شناسد، که باعث می شود قادر به تشخیص هوشمند باشد و فقط تست های مربوطه را دوباره اجرا کند. تقریباً شبیه HMR است اما برای آزمایش.

بهترین بخش Vitest این است که تمام وابستگی ها و آزمایش های برنامه شما را تماشا می کند و اطمینان می دهد که تنها بخشی که به روز رسانی می شود دوباره اجرا می شود. بر اساس تجربه من در استفاده از هر دو فریمورک، Jest و Vitest در اولین اجرای خود عملکرد مشابهی داشتند. در همین حال، وایتست در اجرای مجدد بعدی عملکرد تست بهتری داشت. این به این دلیل است که Vitest فقط بخشی از آزمون یا منطق تجاری را اجرا می کند که به روز شده است.

در حالی که این یک ابزار فوق العاده قدرتمند است، اگر یک توسعه دهنده frontend بتواند آزمایش خود را تجسم کند، می تواند حتی قدرتمندتر باشد.

به عنوان مثال، وقتی تستی را اجرا می کنید که دو متغیر اضافه می کند، A + B، و قرار است برگردد C به صفحه نمایش، می خواهید ببینید که حساب انجام شده است. نتیجه همانطور که از نظر بصری انتظار می رفت با موفقیت روی صفحه نمایش داده شد. اینجاست که Vitest Preview وارد می شود.

Vitest Preview چیست؟

Vitest Preview به شما کمک می‌کند تا تست‌ها را سریع‌تر بنویسید و اشکال‌زدایی کنید و به شما امکان می‌دهد تست خود را در مرورگر تجسم کنید. اگر با Jest آشنایی دارید، می‌دانید که جامعه Jest ابزار اشکال‌زدایی مشابهی به نام Jest Preview دارد که توسط همان توسعه‌دهنده، Hung Viet Nguyen ایجاد شده است. برای کسب اطلاعات بیشتر در مورد آزمایش با Jest، راهنمای ویدیویی ما را در اینجا بررسی کنید.

در 24 اکتبر 2022، هونگ ویت نگوین راه اندازی Vitest Preview را با بیانیه زیر به طور عمومی اعلام کرد:

سوالی که معمولا از من پرسیده می شود این است که “آیا می توانم استفاده کنم؟ @jestPreview برای @vitest_dev“امروز، من راه اندازی می کنم @VitestPreview، برادر کوچک @JestPreview که بر روی @vite_js ساخته شده است، از @vitest_dev پشتیبانی درجه یک دارد و بسیار سریع است.

در ادامه این راهنما، به شما نشان می‌دهم که چگونه پیش‌نمایش Vitest را در مجموعه تست‌های Vite خود ادغام کنید تا به اشکال‌زدایی سریع‌تر و شهودی‌تر کمک کنید.

راه اندازی Vitest Preview برای اشکال زدایی

از آنجایی که ما روی آزمایش‌ها تمرکز خواهیم کرد، یک مخزن GitHub موجود را که برای این راهنما ایجاد کرده‌ام شبیه‌سازی می‌کنیم.

ابتدا دستورات زیر را برای کلون کردن مخزن و نصب تمام وابستگی ها اجرا کنید:

git clone https://github.com/ezesundayeze/vitest-preview-demo && npm install
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فهرست برنامه کلون شده شما باید به این شکل باشد:

├── README.md
├── index.html
├── package-lock.json
├── package.json
├── public
│   └── vitest.svg
├── src
│   ├── App.css
│   ├── App.tsx
│   ├── assets
│   │   └── vite.svg
│   ├── hooks
│   │   └── useCounter.ts
│   ├── index.css
│   ├── main.jsx
│   ├── test
│   │   ├── App.test.tsx
│   │   └── setup.ts
│   ├── utils
│   │   └── test-utils.tsx
│   └── vite.env.d.ts
├── tsconfig.json
└── vite.config.js
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برنامه کلون شده یک پروژه اصلی React است که با کلیک کردن روی a یک شمارنده را افزایش می دهد دکمه. این یک نقطه شروع مشترک برای پروژه های React است که اغلب به عنوان برنامه React Starter شناخته می شود.

برای اینکه بتوانیم آزمایشی را با Vitest Preview اجرا کنیم، وابستگی های زیر را در پروژه خود نصب کرده ایم:

// package.json

"devDependencies": {
    "@testing-library/jest-dom": "^5.16.4",
    "@testing-library/react": "^12.1.5",
    "@testing-library/react-hooks": "^8.0.0",
    "@testing-library/user-event": "^13.5.0",
    "@types/react": "^18.0.21",
    "@types/react-dom": "^18.0.6",
    "@types/testing-library__jest-dom": "^5.14.5",
    "@vitejs/plugin-react": "^2.1.0",
    "jsdom": "^20.0.1",
    "npm-run-all": "^4.1.5",
    "vite": "^3.1.8",
    "vitest": "^0.24.3",
    "vitest-preview": "^0.0.1",
  }

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد پروژه خود

برای ایجاد پروژه خود از ابتدا، می توانید از Vite برای داربست پروژه و نصب وابستگی های لازم مانند Vitest و vitest-previewهمانطور که قبلاً دیدیم. سپس می توانید استفاده کنید npm-run-all برای اجرای Vitest Preview و Vitest به صورت موازی. شما می توانید اضافه کنید npm-run-all به شما package.json برای راحتی فایل

به عنوان مثال، شما می توانید یک script در شما package.json فایل مانند این:

// package.json

...
"scripts": {
    "start": "npm-run-all -p vitest-preview test",
  },
...

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رسیدگی به خطاها

یکی از مشکلات رایجی که هنگام راه اندازی یک پروژه جدید با Vitest Preview با آن مواجه شده ام، خطای زیر است:

Error: Cannot find module '…/build/Release/canvas.node'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا

Error: Module did not self-register .../node_modules/canvas/build/Release/canvas.node
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیشنهادات زیادی برای رفع این مشکل در Stack Overflow و دیگر انجمن‌ها وجود دارد، اما طبق تجربه من، به سادگی نصب canvas وابستگی مشکل را حل کرد حتی زمانی که بعداً وابستگی را حذف کردم، این موضوع دوباره تکرار نشد. این رفتار ممکن است عجیب به نظر برسد، اما در گذشته برای من کارساز بوده است.

اگر با این مشکل مواجه شدید، ممکن است بخواهید نصب کنید canvas و ببینید که آیا مشکل را حل می کند. به خاطر داشته باشید، مراحل خاص برای رفع این مشکل ممکن است بسته به تنظیمات و پیکربندی خاص شما متفاوت باشد، بنابراین همیشه ایده خوبی است که به اسناد ابزارهای مورد استفاده خود مراجعه کنید و در صورت لزوم از انجمن کمک بگیرید.

اشکال زدایی بصری با Vitest Preview

اکنون که نسخه ی نمایشی را تنظیم کرده اید، بیایید یک آزمایش ساده بنویسیم. ابتدا در را باز کنید src/test/app.test.tsx فایل و تستی بنویسید که هفت را شبیه سازی کند button کلیک می کند و سپس تأیید می کند که count هفت افزایش یافته است.

تست ما اینجاست:

// src/test/App.test.ts

import App from '../App';
import { render, screen, fireEvent } from '../utils/test-utils';
import { debug } from 'vitest-preview';

describe('Simple working test', () => {
  it('should increment count on click', async () => {
    render(<App />);
    const button = screen.getByRole('button');
    for (let i = 0; i < 7; i++) {
      fireEvent.click(button);
    }
    debug();
    expect(await screen.findByText(/count is: 7/i)).toBeInTheDocument();
  });
}); 

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در کد بالا، ما را گرفتیم button عنصر و حلقه ای را اجرا کرد که هفت بار تکرار شد و هفت کلیک را شبیه سازی کرد. سپس، بررسی کردیم که هفت رندر شده است.

توجه کنید debug عملکرد در کد؟ اینجاست که Vitest Preview فراخوانی می شود و جادو را انجام می دهد. این کدی است که ما در حال آزمایش آن هستیم:

import { useCounter } from './hooks/useCounter';
import viteLogo from './assets/vite.svg';
import './App.css';
function App() {
  const { count, increment } = useCounter();
  return (
    <div className="App">
      <header className="App-header">
        <p>
          Hello <b>Vitest Preview</b>!
        </p>
        <div>
          <img src={viteLogo} alt="Vite Logo" width={100} />
          <img src="/vitest.svg" alt="Vitest Logo" width={100} />
        </div>
        <p>
          <button className="counter" type="button" onClick={increment}>
            count is: {count}
          </button>
        </p>
        <p>
        </p>
      </header>
    </div>
  );
}
export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگرچه این یک تست استاندارد است، اما چیزی که آن را منحصربه‌فرد می‌کند این است که می‌توانیم پیش‌نمایش کرده و ببینیم که تعداد هفت بر روی صفحه نمایش داده شده است، همانطور که در زیر نشان داده شده است:

ایجاد آزمون دوم

بیایید تست دیگری برای مؤلفه ای ایجاد کنیم که دارای دو ورودی فرم است که اعداد را می پذیرد و وقتی کاربر فرم را ارسال می کند، مجموع اعداد را برمی گرداند.

اینم تست ما:

///src/test/Calculator.test.ts
import { render, screen, fireEvent } from "@testing-library/react";
import Calculator from "../Calculator";
import { debug } from "vitest-preview";

describe("Calculator", () => {
    it("should add two numbers and display the result", async () => {
        // Render the component
        render(<Calculator />);

        // Find the input fields and the button
        const input1 = screen.getByLabelText("First number:");
        const input2 = screen.getByLabelText("Second number:");
        const button = screen.getByRole("button", { name: "Add numbers" });

        // Enter values into the input fields
        fireEvent.change(input1, { target: { value: "2" } });
        fireEvent.change(input2, { target: { value: "3" } });

        // Click the button
        fireEvent.click(button);
        debug();
        // Assert that the result is displayed on the page
        expect(await screen.findByText("The result is: 5")).toBeInTheDocument();
    });
})

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید کد آن را نیز بنویسیم:

// src/Calculator.tsx

import { useState } from "react";
import './App.css';
const Calculator = () => {
  // Declare two state variables, one for each input field
  const [num1, setNum1] = useState(0);
  const [num2, setNum2] = useState(0);
  // Declare a state variable for the result of the calculation
  const [result, setResult] = useState("");
  // Define a function to handle the form submission
  const handleSubmit = (event) => {
    event.preventDefault();
    // Convert the input values to numbers and add them
    const sum = Number(num1) + Number(num2);
    // Update the result state with the calculated sum
    setResult(sum);
  };
  return (
    <form onSubmit={handleSubmit}>
      <label>
        First number:
        <input
          type="number"
          value={num1}
          onChange={(event) => setNum1(event.target.value)}
        />
      </label>
      <label>
        Second number:
        <input
          type="number"
          value={num2}
          onChange={(event) => setNum2(event.target.value)}
        />
      </label>
      <button type="submit">Add numbers</button>
      {result && <div>The result is: {result}</div>}
    </form>
  );
};
export default Calculator;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این پیش‌نمایش هنگام اجرای آزمایش است: پیش نمایش Vitest در حال اجرای اشکال زدایی بصری

من آن اعداد را در فیلدهای ورودی تایپ نکردم. آزمایش همانطور که توضیح دادیم انجام شد. سپس، Vitest Preview مطمئن شد که می‌توانیم آن را در مرورگر پیش‌نمایش کنیم. همانطور که در ترمینال و به صورت بصری در زیر مشاهده می کنید، تمام تست ها در حال قبولی هستند: اشکال زدایی بصری با پیش نمایش Vitest نمایش گذراندن تست ها

همانطور که می توانید بگویید، Vitest Preview می تواند در اشکال زدایی برنامه های فرانت اند بسیار مفید باشد، زیرا به شما امکان می دهد در زمان آزمایش خود بازخورد دریافت کنید که مستقیماً نحوه تعامل کاربران شما با برنامه شما را فراتر از داشتن یک مدل ذهنی از فرآیند شبیه سازی می کند.

نتیجه

توسعه Frontend هر روز سرگرم کننده تر می شود زیرا چندین ابزار متمرکز بر افزایش تجربه توسعه دهندگان ساخته می شوند. Vitest Preview یک ابزار ارزشمند تست بصری و اشکال زدایی است، صرف نظر از مقیاس پروژه شما. برای مطالعه بیشتر، باید مستندات را بررسی کنید.


آیا کتابخانه های جدید JS را برای بهبود عملکرد یا ایجاد ویژگی های جدید اضافه می کنید؟ اگر برعکس عمل کنند چه؟

شکی نیست که فرانت اندها پیچیده تر می شوند. همانطور که کتابخانه های جدید جاوا اسکریپت و وابستگی های دیگر را به برنامه خود اضافه می کنید، برای اطمینان از اینکه کاربران شما با مشکلات ناشناخته مواجه نمی شوند، به دید بیشتری نیاز دارید.

LogRocket یک راه حل مانیتورینگ برنامه کاربردی است که به شما امکان می دهد خطاهای جاوا اسکریپت را به گونه ای تکرار کنید که گویی در مرورگر شما اتفاق افتاده است تا بتوانید به طور موثرتری به باگ ها واکنش نشان دهید.

ثبت نام LogRocket

LogRocket بدون در نظر گرفتن چارچوب، با هر برنامه ای کاملاً کار می کند و دارای پلاگین هایی برای ثبت زمینه اضافی از Redux، Vuex، و @ngrx/store است. به جای حدس زدن چرایی مشکلات، می توانید در مورد وضعیتی که برنامه شما در هنگام بروز مشکل در آن قرار داشت، جمع آوری کرده و گزارش دهید. LogRocket همچنین بر عملکرد برنامه شما نظارت می کند، معیارهایی مانند بار CPU مشتری، استفاده از حافظه مشتری و موارد دیگر را گزارش می دهد.

با اطمینان بسازید – نظارت را به صورت رایگان شروع کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا