با یه تیر دو نشان بزن🎯، هدیه 6 میلیونی(متخصص لینوکس) به همراه ۲0٪ تخفیف روی همه دوره‌های متخصص😍
۰ ثانیه
۰ دقیقه
۰ ساعت
۰ دیدگاه نظر محسن موحد
Jest چیست؟ (ویژگی‌ها و قابلیت‌های Jest)
Jest چیست؟ (ویژگی‌ها و قابلیت‌های Jest)

تصور کن که یه برنامه‌نویس هستی و هر روز صبح با یه فنجان قهوه (☕️) پای کامپیوترت می‌شینی و شروع به کدنویسی می‌کنی. همه چیز عالی پیش می‌ره، اما وقتی نوبت به تست کردن کدها می‌رسه، اوضاع پیچیده می‌شه. باید ساعت‌ها وقت بذاری تا مطمئن بشی که همه بخش‌های برنامه به درستی کار می‌کنه. این فرآیند می‌تونه خیلی خسته‌کننده و زمان‌بر باشه، درسته؟

حالا تصور کن که یه ابزار هوشمند وجود داشت که می‌تونست این کار رو برات انجام بده. چقدر زندگی راحت‌تر می‌شد؟ در همین لحظات سخت و طاقت‌فرسا بود که نیاز به ابزاری برای تست خودکار به‌شدت احساس شد. اینجا بود که Jest وارد ماجرا شد و تحول بزرگی در فرآیند تست‌نویسی به وجود آورد.

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

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

Jest چیست؟

Jest یک فریم‌ورک تست خودکار برای JavaScript است که توسط Facebook توسعه داده شده. این فریم‌ورک به‌طور ویژه برای تست برنامه‌های React طراحی شده، اما به‌خوبی با سایر فریم‌ورک‌ها و کتابخانه‌های JavaScript هم کار می‌کنه. Jest امکانات بسیار زیادی داره که از جمله‌ی اون‌ها می‌شه به اجرای سریع تست‌ها، پوشش تست، و قابلیت‌های ماکینگ(Mocking) و اسپایینگ(Spying) اشاره کرد. Jest به‌طور پیش‌فرض تنظیمات زیادی داره که بهت کمک می‌کنه تا بدون نیاز به پیکربندی پیچیده، شروع به نوشتن تست‌ها کنی.

دنیایی بدون Jest و ابزار تست

حالا یه لحظه تصور کن اگه Jest و ابزارهای مشابه وجود نداشتن، چی می‌شد؟ برنامه‌نویسان و تسترها باید همه تست‌ها رو به‌صورت دستی انجام می‌دادن. هر بار که تغییری در کدها ایجاد می‌شد، باید ساعت‌ها وقت صرف چک کردن تمام بخش‌های مختلف برنامه می‌کردن. این یعنی تاخیری بزرگ در توسعه و به‌روزرسانی نرم‌افزارها. دنیای تکنولوژی به این سرعت و پیشرفت نمی‌رسید و احتمالاً هنوز درگیر حل مشکلات ساده و ابتدایی بودیم. همچنین، احتمال خطاهای انسانی خیلی بیشتر بود و کیفیت نرم‌افزارها به شدت پایین می‌اومد.

چرا باید Jest رو بشناسیم؟

شاید بپرسی چرا باید در مورد Jest بدونی؟ خیلی ساده‌ست! اگه یه روزی خواستی وارد دنیای برنامه‌نویسی و توسعه وب بشی، یا حتی اگه فقط یه پروژه کوچیک داشته باشی، نیاز داری بدونی چطور می‌تونی مطمئن بشی که کدها و برنامه‌هات به درستی کار می‌کنن. Jest می‌تونه کمک کنه تا خیلی راحت و بدون دردسر، تست‌های خودکار برای کدها و برنامه‌هات بنویسی و از درست بودن عملکردشون مطمئن بشی. با Jest می‌تونی تست‌های واحد (unit tests)، تست‌های مجتمع (integration tests) و حتی تست‌های نهایی (end-to-end tests) رو خیلی راحت بنویسی و اجرا کنی.

تاریخچه‌ Jest

Jest توسط Facebook توسعه داده شد و اولین بار در سال ۲۰۱۴ منتشر شد. هدف اصلی از توسعه Jest، ارائه‌ی یک ابزار تست قدرتمند و قابل اطمینان برای برنامه‌های JavaScript بود. این ابزار به‌سرعت محبوبیت زیادی پیدا کرد و حالا یکی از پراستفاده‌ترین ابزارهای تست خودکار در دنیای JavaScript است. Facebook با استفاده از تجربه‌های خودش در توسعه محصولات بزرگ مثل React، سعی کرد ابزاری بسازه که نیازهای برنامه‌نویسان رو به خوبی پوشش بده و فرآیند تست رو بهینه کنه.

چرا نام Jest؟

اسم Jest از کلمه "jest" به معنی شوخی و مزاح گرفته شده. ایده پشت این نامگذاری این بود که تست کردن کدها نباید کاری خسته‌کننده و جدی باشه، بلکه باید بتونی باهاش خوش بگذرونی و ازش لذت ببری. این نامگذاری نشون می‌ده که تیم توسعه‌دهنده می‌خواستن تست کردن کدها رو تبدیل به کاری ساده و دلپذیر کنن، نه یه کار پیچیده و طاقت‌فرسا.

چرا Jest محبوب است؟

Jest به‌خاطر امکانات فراوان و عملکرد عالی‌اش، به‌سرعت تبدیل به یکی از محبوب‌ترین ابزارهای تست خودکار در دنیای JavaScript شده. این ابزار بسیار ساده و کاربردی است و امکاناتی مثل تست‌های موازی، پوشش تست، و ماکینگ رو به‌صورت پیش‌فرض ارائه می‌ده. تست‌های موازی بهت اجازه می‌دن تا چندین تست رو به‌صورت همزمان اجرا کنی و اینجوری زمان تست کردن کدها رو به‌طور قابل توجهی کاهش بدی. همچنین، Jest گزارش‌های بسیار دقیقی از نتایج تست‌ها ارائه می‌ده که بهت کمک می‌کنه تا به راحتی مشکلات کدها رو شناسایی و برطرف کنی.

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

چگونه از Jest استفاده کنیم؟

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

نصب Jest

اول از همه باید Jest رو نصب کنی. نصب Jest خیلی راحته و می‌تونی از npm یا yarn برای این کار استفاده کنی. نصب Jest به عنوان یک وابستگی توسعه (dev dependency) انجام می‌شه. این یعنی فقط در زمان توسعه پروژه نیاز به Jest داری و در نسخه نهایی پروژه شامل نمی‌شه.

نصب با npm

اگه از npm استفاده می‌کنی، این دستور رو توی ترمینال اجرا کن:

npm install --save-dev jest

نصب با yarn

اگه از yarn استفاده می‌کنی، این دستور رو اجرا کن:

yarn add --dev jest

تنظیمات اولیه Jest

بعد از نصب، می‌تونی Jest رو به راحتی تنظیم کنی. برای این کار، فقط کافیه توی فایل package.json بخش scripts رو به شکل زیر اضافه کنی:

{
  "scripts": {
    "test": "jest"
  }
}

این تنظیمات بهت اجازه می‌ده که با اجرای دستور npm test یا yarn test، تمام تست‌های پروژه‌ات رو اجرا کنی.

نوشتن اولین تست با Jest

حالا بیا یه مثال ساده رو با هم ببینیم تا متوجه بشی چطور می‌تونی با Jest یه تست بنویسی و اجرا کنی. فرض کن که یه تابع به نام sum داری که دو عدد رو به هم اضافه می‌کنه. می‌خوای مطمئن بشی که این تابع به‌درستی کار می‌کنه.

تعریف تابع sum

اول یه فایل به نام sum.js ایجاد کن و تابع sum رو توش تعریف کن:

function sum(a, b) {
  return a + b;
}
module.exports = sum;

این تابع به سادگی دو عدد رو به هم اضافه می‌کنه و نتیجه رو برمی‌گردونه.

نوشتن تست برای تابع sum

حالا یه فایل جدید به نام sum.test.js ایجاد کن و تست زیر رو توش بنویس:

const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

توی این تست، از تابع test استفاده کردیم که یک تست جدید تعریف می‌کنه. داخل این تست، از تابع expect استفاده می‌کنیم تا مقدار بازگشتی تابع sum رو با مقدار مورد انتظارمون مقایسه کنیم. اینجا می‌خوایم مطمئن بشیم که sum(1, 2) برابر با 3 هست.

اجرای تست

برای اجرای تست، فقط کافیه دستور زیر رو توی ترمینال اجرا کنی:

npm test

یا اگه از yarn استفاده می‌کنی:

yarn test

این دستور Jest رو اجرا می‌کنه و تمام تست‌های موجود در پروژه‌ات رو پیدا و اجرا می‌کنه. اگه همه چیز درست باشه، باید ببینی که تست‌ها با موفقیت اجرا شدن.

مثال‌های بیشتر با Jest

حالا که با اصول اولیه آشنا شدی، بیا چند مثال دیگه رو هم بررسی کنیم تا بهتر با قابلیت‌های Jest آشنا بشی.

تست کردن تابعی که داده‌ها رو از API می‌گیره

فرض کن یه تابع داری که داده‌ها رو از یه API می‌گیره. می‌خوای این تابع رو تست کنی ولی نمی‌خوای هر بار به API واقعی درخواست بفرستی. می‌تونی تابع رو mock کنی:

const fetchData = jest.fn(() => Promise.resolve('data'));
test('fetches data successfully', async () => {
  const data = await fetchData();
  expect(data).toBe('data');
});

توی این مثال، تابع fetchData رو mock کردیم تا به جای ارسال درخواست واقعی، یه Promise که با داده دلخواه resolve می‌شه رو برگردونه.

تست کردن تابعی که یه پیام خوش‌آمدگویی تولید می‌کنه

حالا فرض کن یه تابع داری که یه پیام خوش‌آمدگویی برای کاربر تولید می‌کنه. بیا این تابع رو تست کنیم:

function greet(name) {
  return `Hello, ${name}!`;
}
module.exports = greet;

و حالا تستش رو بنویسیم:

const greet = require('./greet');
test('greets the user with their name', () => {
  expect(greet('Alice')).toBe('Hello, Alice!');
});

تست کردن تابعی که یک عملیات غیرهمزمان انجام می‌ده

فرض کن یه تابع غیرهمزمان داری که باید یه عملیات رو انجام بده و نتیجه رو برگردونه. بیا تستش کنیم:

function fetchUser() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ name: 'Alice' });
    }, 1000);
  });
}
module.exports = fetchUser;

و حالا تستش رو بنویسیم:

const fetchUser = require('./fetchUser');
test('fetches the user data', async () => {
  const user = await fetchUser();
  expect(user.name).toBe('Alice');
});

ویژگی‌ها و قابلیت‌های Jest

Jest یه ابزار تست فوق‌العاده برای جاوااسکریپته که بهت کمک می‌کنه تا به راحتی تست‌های خودکار برای کدها و برنامه‌هات بنویسی. از نصب و راه‌اندازی ساده گرفته تا امکانات پیشرفته مثل تست‌های موازی، پوشش تست، mock و اسپایینگ، Jest همه چی رو در اختیارت می‌ذاره. حالا بیا این قابلیت‌ها رو بررسی کنیم.

تست‌های موازی

یکی از قابلیت‌های جذاب Jest اینه که می‌تونه تست‌ها رو به صورت موازی اجرا کنه. این یعنی تست‌های مختلف به‌طور همزمان اجرا می‌شن و این کار باعث می‌شه زمان اجرای تست‌ها به طور چشم‌گیری کاهش پیدا کنه. فرض کن به جای اینکه تست‌ها یکی یکی اجرا بشن، همزمان چندین تست با هم اجرا بشن. این ویژگی به‌خصوص وقتی تعداد تست‌هات زیاد باشه یا تست‌ها زمان زیادی ببرن، خیلی به کار میاد و بهت کمک می‌کنه تا سریع‌تر به نتیجه برسی و زمان بیشتری برای بهبود کدها و اضافه کردن ویژگی‌های جدید داشته باشی.

پوشش تست (Coverage)

Jest به‌صورت پیش‌فرض از پوشش تست (coverage) پشتیبانی می‌کنه. فقط کافیه دستور jest --coverage رو اجرا کنی تا ببینی چه مقدار از کدات تحت پوشش تست قرار دارن. این ویژگی بهت کمک می‌کنه تا بخش‌هایی از کد که نیاز به تست بیشتر دارن رو شناسایی کنی. به عبارت دیگه، می‌تونی مطمئن بشی که همه قسمت‌های مهم کدت تست شدن و هیچ نقطه کوری باقی نمونده. این موضوع به بهبود کیفیت کد و کاهش باگ‌ها کمک زیادی می‌کنه.

Mock کردن

Jest امکاناتی برای mock کردن توابع و ماژول‌ها داره که این بهت کمک می‌کنه تست‌های واحد بنویسی بدون اینکه به وابستگی‌های خارجی نیاز داشته باشی. این ویژگی مخصوصاً زمانی که نیاز داری یه تابع یا ماژول خاص رو تست کنی ولی نمی‌خوای وابستگی‌های بیرونی رو شامل کنی، خیلی مفیده. مثلاً فرض کن یه تابع داری که از یه API داده می‌گیره. می‌تونی اون API رو mock کنی تا نیاز نباشه هر بار که تست رو اجرا می‌کنی به سرور واقعی درخواست بفرسته.

اسپایینگ (Spying)

Jest همچنین قابلیت اسپایینگ رو داره که بهت اجازه می‌ده تا فراخوانی‌های توابع رو بررسی کنی و مطمئن بشی که توابع به درستی فراخوانی شدن. این ویژگی وقتی مفیده که می‌خوای مطمئن بشی یه تابع خاص با پارامترهای درست فراخوانی شده. مثلاً اگه یه تابع رو چندین بار با مقادیر مختلف فراخوانی می‌کنی، می‌تونی با استفاده از اسپایینگ بررسی کنی که هر فراخوانی با پارامترهای درست انجام شده یا نه.

تنظیمات آسان

یکی دیگه از ویژگی‌های خوب Jest تنظیمات ساده و آسونشه. می‌تونی به‌راحتی فایل‌های پیکربندی Jest رو ایجاد کنی و تنظیمات مورد نیازت رو اعمال کنی. حتی اگه تازه‌کار باشی، با مستندات خوب و مثال‌های زیادی که داره، می‌تونی به راحتی Jest رو تنظیم کنی و شروع به نوشتن تست‌هات کنی. این ویژگی‌ها Jest رو به یکی از محبوب‌ترین فریم‌ورک‌های تست جاوااسکریپت تبدیل کرده و باعث می‌شه که استفاده ازش لذت‌بخش و مؤثر باشه.

معایب Jest

هر ابزاری معایب خودش رو داره و Jest هم از این قاعده مستثنی نیست. بیایید با هم چند تا از معایب این فریم‌ورک رو بررسی کنیم.

سرعت اجرای تست‌ها در پروژه‌های بزرگ

یکی از مشکلاتی که ممکنه باهاش روبرو بشی، سرعت اجرای تست‌ها در پروژه‌های خیلی بزرگه. وقتی تعداد تست‌ها زیاد بشه و پروژه‌ات پیچیده‌تر بشه، سرعت اجرای تست‌ها ممکنه کمی کاهش پیدا کنه. این می‌تونه باعث بشه که زمان بیشتری برای اجرای کامل تست‌ها نیاز داشته باشی، مخصوصاً اگه تعداد تست‌های موازی زیاد باشه.

پشتیبانی محدود از مرورگرها

Jest بیشتر برای تست‌های سروری و برنامه‌های React طراحی شده و پشتیبانی محدودی از مرورگرها داره. این یعنی اگه نیاز داری تست‌هایی رو مستقیماً روی مرورگرهای مختلف اجرا کنی، شاید نیاز باشه از ابزارهای دیگه‌ای مثل Selenium یا Cypress استفاده کنی. Jest بیشتر برای محیط‌های Node.js و جاوااسکریپت طراحی شده و برای تست‌های مرورگری نیاز به تنظیمات و ابزارهای اضافی داره.

به هر حال، با وجود این معایب، Jest همچنان یکی از بهترین و محبوب‌ترین ابزارهای تست برای جاوااسکریپت و React باقی می‌مونه و مزایای زیادی داره که این معایب رو پوشش می‌ده.

مثال‌های عملی با Jest

Jest یه فریم‌ورک قدرتمند برای تست کردن کدهای جاوااسکریپت هست که به راحتی می‌تونی ازش برای تست کردن کامپوننت‌ها، توابع و ماژول‌های مختلف استفاده کنی. حالا بیا با هم چند تا مثال عملی ببینیم تا بهتر متوجه بشی چطور می‌تونی با Jest تست بنویسی.

مثال ۱: تست یک کامپوننت React

فرض کن که یه کامپوننت ساده به نام Button داری که یه دکمه رو نمایش می‌ده. می‌خوای مطمئن بشی که این کامپوننت به‌درستی رندر می‌شه و روی دکمه کلیک می‌شه.

تعریف کامپوننت Button

اولین قدم اینه که کامپوننت Button رو تعریف کنیم:

import React from 'react';
function Button({ onClick, children }) {
  return <button onClick={onClick}>{children}</button>;
}
export default Button;

این کامپوننت یه دکمه رو نمایش می‌ده که وقتی روش کلیک می‌کنی، تابع onClick فراخوانی می‌شه.

نوشتن تست برای کامپوننت Button

حالا یه فایل جدید به نام Button.test.js ایجاد کن و تست زیر رو توش بنویس:

import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import Button from './Button';
test('renders button and handles click', () => {
  const handleClick = jest.fn();
  const { getByText } = render(<Button onClick={handleClick}>Click me</Button>);
  fireEvent.click(getByText('Click me'));
  expect(handleClick).toHaveBeenCalledTimes(1);
});

توی این تست، از jest.fn() برای ایجاد یه تابع ماک استفاده کردیم که وقتی دکمه کلیک می‌شه، باید فراخوانی بشه. با fireEvent.click روی دکمه کلیک می‌کنیم و بعدش چک می‌کنیم که تابع handleClick یک بار فراخوانی شده باشه.

مثال ۲: ماک کردن یک ماژول

فرض کن که یه ماژول داری که اطلاعاتی رو از یه API می‌گیره و می‌خوای این ماژول رو ماک کنی تا بتونی تستش کنی.

تعریف ماژول fetchData

اول باید ماژول fetchData رو تعریف کنیم:

const fetchData = async () => {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return data;
};
module.exports = fetchData;

این تابع اطلاعات رو از یه API می‌گیره و به صورت JSON برمی‌گردونه.

نوشتن تست برای ماژول fetchData

حالا یه فایل جدید به نام fetchData.test.js ایجاد کن و تست زیر رو توش بنویس:

const fetchData = require('./fetchData');
jest.mock('./fetchData');
test('fetches data from API', async () => {
  const mockData = { name: 'John Doe' };
  fetchData.mockResolvedValue(mockData);
  const data = await fetchData();
  expect(data).toEqual(mockData);
});

توی این تست، ماژول fetchData رو ماک می‌کنیم و مقدار mockResolvedValue رو تنظیم می‌کنیم تا یه داده دلخواه برگردونه. بعدش تابع رو فراخوانی می‌کنیم و مطمئن می‌شیم که داده برگردونده شده برابر با mockData هست.

مثال ۳: تست یک تابع Async

فرض کن که یه تابع Async به نام getUser داری که اطلاعات یه کاربر رو برمی‌گردونه و می‌خوای تستش کنی.

تعریف تابع getUser

اول باید تابع getUser رو تعریف کنیم:

async function getUser(id) {
  const response = await fetch(`https://api.example.com/users/${id}`);
  const user = await response.json();
  return user;
}
module.exports = getUser;

این تابع اطلاعات یه کاربر رو با استفاده از شناسه‌اش از یه API می‌گیره و به صورت JSON برمی‌گردونه.

نوشتن تست برای تابع getUser

حالا یه فایل جدید به نام getUser.test.js ایجاد کن و تست زیر رو توش بنویس:

const getUser = require('./getUser');
jest.mock('./getUser');
test('fetches user by ID', async () => {
  const mockUser = { id: 1, name: 'John Doe' };
  getUser.mockResolvedValue(mockUser);
  const user = await getUser(1);
  expect(user).toEqual(mockUser);
});

توی این تست، تابع getUser رو ماک می‌کنیم و مقدار mockResolvedValue رو تنظیم می‌کنیم تا یه کاربر دلخواه برگردونه. بعدش تابع رو فراخوانی می‌کنیم و مطمئن می‌شیم که کاربر برگردونده شده برابر با mockUser هست.

مقایسه Jest با ابزارهای مشابه

تست کردن کدهای جاوااسکریپت بخش مهمی از فرآیند توسعه است و انتخاب ابزار مناسب برای این کار می‌تونه کیفیت کدها و کارایی تیم توسعه رو بهبود بده. در اینجا، قصد داریم Jest رو با چهار ابزار محبوب دیگه یعنی Mocha، Jasmine، Chai و Cypress مقایسه کنیم. هر کدوم از این ابزارها ویژگی‌ها و کاربردهای خاص خودشون رو دارن که با مثال‌های عملی بهتر متوجه تفاوت‌هاشون می‌شیم.

Jest

Jest یک فریم‌ورک تست کامل و همه‌کاره است که توسط Facebook توسعه داده شده. Jest همه امکانات لازم برای تست خودکار رو به‌صورت پیش‌فرض ارائه می‌ده، از جمله پوشش تست، تست‌های موازی و ماکینگ. این یعنی نیازی به پیکربندی و نصب بسته‌های اضافی نداری و می‌تونی به‌سرعت تست‌های خودت رو بنویسی و اجرا کنی.

// تابعی که دو عدد رو جمع می‌کنه
function sum(a, b) {
  return a + b;
}
module.exports = sum;
// تست برای تابع sum
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Mocha

Mocha یکی از قدیمی‌ترین و معروف‌ترین فریم‌ورک‌های تست برای جاوااسکریپت است. این ابزار امکانات زیادی داره و بسیار قابل تنظیمه، اما نیاز به پیکربندی بیشتری نسبت به Jest داره. Mocha به‌تنهایی کتابخانه‌های ماکینگ و اسپایینگ رو شامل نمی‌شه و برای استفاده از این قابلیت‌ها باید از کتابخانه‌های اضافی مثل Chai و Sinon استفاده کنی.

const assert = require('assert');
const sum = require('./sum');
describe('Sum function', () => {
  it('should return 3 when adding 1 and 2', () => {
    assert.strictEqual(sum(1, 2), 3);
  });
});

Jasmine

Jasmine هم یکی دیگه از ابزارهای معروف تست برای جاوااسکریپت است. این ابزار امکانات زیادی داره و به‌طور کامل تست‌های واحد و مجتمع رو پوشش می‌ده، اما امکاناتی مثل پوشش تست رو به‌صورت پیش‌فرض ارائه نمی‌ده و نیاز به پیکربندی بیشتری داره.

const sum = require('./sum');
describe('Sum function', () => {
  it('adds 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).toBe(3);
  });
});

Chai

Chai یک کتابخانه assertion برای جاوااسکریپت است که معمولاً با Mocha یا سایر فریم‌ورک‌های تست استفاده می‌شه. Chai به‌خاطر قابلیت‌های فراوانش در زمینه‌ی assertions بسیار محبوبه، اما خودش به تنهایی یک فریم‌ورک تست کامل نیست و برای استفاده از اون نیاز به یک فریم‌ورک تست مثل Mocha داری.

const chai = require('chai');
const expect = chai.expect;
const sum = require('./sum');
describe('Sum function', () => {
  it('should return 3 when adding 1 and 2', () => {
    expect(sum(1, 2)).to.equal(3);
  });
});

Cypress

Cypress یک ابزار تست خودکار مدرن و پرقدرت است که به‌طور خاص برای تست برنامه‌های وب طراحی شده. Cypress امکانات زیادی داره و به‌خوبی با فریم‌ورک‌های جاوااسکریپت مثل React و Angular کار می‌کنه. یکی از مزایای Cypress اینه که تست‌ها رو به‌صورت بلادرنگ (real-time) اجرا می‌کنه و تجربه‌ی تست بسیار تعاملی ارائه می‌ده. اما برخلاف Jest، Cypress برای تست‌های واحد (unit tests) طراحی نشده و بیشتر برای تست‌های end-to-end استفاده می‌شه.

describe('My First Test', () => {
  it('Visits the Kitchen Sink', () => {
    cy.visit('https://example.cypress.io');
    cy.contains('type').click();
    cy.url().should('include', '/commands/actions');
    cy.get('.action-email').type('fake@email.com').should('have.value', 'fake@email.com');
  });
});

جدول مقایسه

ویژگی‌ها

Jest

Mocha

Jasmine

Chai

Cypress

پیکربندی

حداقل

نیاز به پیکربندی

نیاز به پیکربندی

نیاز به فریم‌ورک تست مثل Mocha

حداقل

ماکینگ و اسپایینگ

پیش‌فرض

نیاز به کتابخانه اضافی (Sinon)

پیش‌فرض

نیاز به کتابخانه اضافی (Sinon)

بله، با قابلیت‌های محدود

پوشش تست

پیش‌فرض

نیاز به کتابخانه اضافی

نیاز به کتابخانه اضافی

نیاز به کتابخانه اضافی

خیر

تست‌های موازی

بله

نیاز به تنظیمات اضافی

خیر

نیاز به تنظیمات اضافی

بله، با محدودیت‌هایی

قابلیت استفاده

ساده و کاربرپسند

نیاز به یادگیری بیشتر

نسبتاً ساده

نیاز به یادگیری بیشتر

بسیار ساده و تعاملی

تمرکز اصلی

واحد، مجتمع، انتها به انتها

واحد و مجتمع

واحد و مجتمع

assertions

انتها به انتها

هر یک از این ابزارها مزایا و معایب خودشون رو دارن و انتخاب بهترین ابزار بستگی به نیازها و ترجیحات خاص پروژه‌ی شما داره. Jest به خاطر سادگی، امکانات پیش‌فرض و پشتیبانی جامع از تست‌های مختلف، یکی از محبوب‌ترین ابزارهای تست در جامعه‌ی جاوااسکریپت هست. اما اگه نیاز به تنظیمات بیشتر و انعطاف‌پذیری بالاتر داری، Mocha و Jasmine هم گزینه‌های بسیار خوبی هستن. Chai هم به عنوان یک کتابخانه قدرتمند برای assertions می‌تونه همراه خوبی برای Mocha و Jasmine باشه. و در نهایت، Cypress برای تست‌های انتها به انتها یه ابزار فوق‌العاده است که تجربه تست تعاملی و بلادرنگ ارائه می‌ده.

سوالات متداول

1. آیا Jest فقط برای React مناسبه؟

نه، Jest برای تست برنامه‌های جاوااسکریپت به‌طور کلی مناسبه و می‌تونی ازش برای تست هر پروژه جاوااسکریپت استفاده کنی. این ابزار با فریم‌ورک‌هایی مثل Angular، Vue.js و Node.js هم به‌خوبی کار می‌کنه.

2. چطور می‌تونم تست‌های Snapshot رو با Jest بنویسم؟

برای نوشتن تست‌های Snapshot با Jest، می‌تونی از تابع toMatchSnapshot استفاده کنی. این تابع خروجی کامپوننت رو به‌صورت Snapshot ذخیره می‌کنه و تغییراتش رو در تست‌های بعدی بررسی می‌کنه. مثلاً:

test('renders correctly', () => {
  const tree = renderer.create(<MyComponent />).toJSON();
  expect(tree).toMatchSnapshot();
});

3. Jest با چه فریم‌ورک‌های دیگه‌ای کار می‌کنه؟

Jest به‌خوبی با فریم‌ورک‌هایی مثل React، Angular، Vue.js و Node.js کار می‌کنه. این ابزار بهت کمک می‌کنه تا تست‌های خودکار برای هر پروژه جاوااسکریپتی بنویسی.

4. چطور می‌تونم تست‌های خودکارم رو با Jest اجرا کنم؟

برای اجرای تست‌ها با Jest، می‌تونی از دستور npm test یا jest استفاده کنی. این دستورات تمام تست‌های پروژه رو اجرا می‌کنن و نتایج رو بهت نمایش می‌دن.

5. آیا Jest رایگانه؟

بله، Jest کاملاً رایگان و متن‌باز هست و می‌تونی بدون هیچ هزینه‌ای ازش استفاده کنی. Jest توسط Facebook توسعه داده شده و پشتیبانی می‌شه.

جمع‌بندی

Jest یکی از قدرتمندترین و پرکاربردترین ابزارهای تست خودکار برای JavaScript هست که توسط Facebook توسعه داده شده. با استفاده از Jest، می‌تونی به‌راحتی تست‌های خودکار برای کدها و برنامه‌هات بنویسی و از درست بودن عملکردشون مطمئن بشی. این ابزار با امکانات پیش‌فرض فراوان، مثل پوشش تست، ماکینگ و اسپایینگ، یکی از بهترین گزینه‌ها برای تست برنامه‌های JavaScript به‌شمار می‌ره.

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

۰ دیدگاه
ما همه سوالات و دیدگاه‌ها رو می‌خونیم و پاسخ میدیم
  • Jest چیست؟
  • دنیایی بدون Jest و ابزار تست
  • چرا باید Jest رو بشناسیم؟
  • تاریخچه‌ Jest
  • چگونه از Jest استفاده کنیم؟
  • ویژگی‌ها و قابلیت‌های Jest
  • معایب Jest
  • مثال‌های عملی با Jest
  • مقایسه Jest با ابزارهای مشابه
  • سوالات متداول
  • جمع‌بندی
اشتراک گذاری مقاله در :