Unit‌ test در جاوا ‌اسکریپت با jest - بخش اول

ترجمه و تالیف : محمدرضا مصلی
تاریخ انتشار : 29 آبان 99
خواندن در 2 دقیقه
دسته بندی ها : جاوا اسکریپت

در این مطلب به بررسی موضوع unit test در جاوا اسکریپت با jest می‌پردازیم. امیدوارم مورد استفاده‌تان قرار بگیرد.

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

راه حل چیست؟ نوشتن کد‌هایی که کد‌های ما را تست و بررسی کند؛ شاید با شنیدن این جمله متعجب شوید و نوشتن تست را کار بیهوده‌ای بدانید؛ البته من هم اول مثل شما فکر می‌کردم ولی برای صرفه‌جویی در زمان و توسعه هرچه سریع‌تر نرم‌افزار ما، به unit test احتیاج داریم تا خطاهایی که در حین توسعه بوجود می‌آید را به حداقل برسانیم.

برای درک و آشنایی بیشتر دوره تست در جاوا اسکریپت را به شما پیشنهاد می‌کنم.

Jest چیست؟

Jest یک فریمورک unit test برای زبان جاوا اسکریپت است که توسط فیسبوک ارائه شده و تمرکز آن بر روی سادگی‌ست. شما به راحتی می‌توانید از jest در پروژه‌های node, react, vue, angular, typescript و.... استفاده کنید.

نحوه‌ی تنظیم و استفاده از jest در پروژه:

ایجاد فولدر

mkdir jest-tutorial
cd jest-tutorial​

ایجاد فایل package.json برای نصب پکیج های مورد نظر

npm init -y​

نصب پکیج jest

npm install --save-dev jest​

اگر می‌خواهید از import و export استفاده کنید به پکیج‌های زیر نیاز دارید

npm install --save-dev babel-jest @babel/core @babel/preset-env​

پس از نصب پکیج‌های مربوط به babel باید فایل config آن را نیز ایجاد کنیم

 
module.exports = {
  presets: [
    [
      "@babel/preset-env",
      {
        targets: {
          node: "current",
        },
      },
    ],
  ],
}

حال باید command تستی که در package.json وجود دارد را تغییر دهیم

"scripts"
:
 {
	"test": "jest --watchAll --no-cache"
}​

اگر دستور npm test را اجرا کنید با پیام No tests found, exiting with code 0 مواجه خواهید شد؛ خب این خطا کاملا درست است چون ما نه کدی نوشتیم نه کد تست داریم، پس بیایید چند function برای عملیات جمع، ضرب، منها و تقسیم بوجود بیاوریم.

export const sum = (x, y) => {
  return x + y
}

export const multiplication = (x, y) => {
  return x * y;
}

export const subtraction = (x, y) => {
  return x - y
}

export const division = (x, y) => {
  return x / y
}
 

در اینجا چهار function را فایل math.js نوشتیم که عملیات ریاضی یعنی جمع، ضرب، منها و تقسیم را انجام می‌دهد و می‌خواهیم آن‌ها را تست کنیم تا از درستی آن‌ها مطلع شویم.

قبل از شروع تست فولدر tests را در پروژه خود ایجاد کنید.

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

 
import { sum } from "../math"

it("return 6 when 4 plus to 2", () => {
  expect(sum(4,2)).toBe(6)
})

it("4 plus 2 is not 7", () => {
  expect(sum(4, 2)).not.toBe(7)
})

در اینجا دو سناریو نوشتیم از اولی انتظار داریم اگر عدد ۴ و ۲ را به عنوان پارامتر به تابع sum ارسال کنیم نتیجه ۶ خواهد بود و چنان چه در سناریو اول دیدم جمع ۴ و ۲ عدد ۶ می‌شود پس در سناریو نیاز داریم تا تایید کند ۴ به‌علاوه ۲ نتیجه ای جز ۶ ندارد.

برای تست تابع multiplication فایل multiplication.test.js را ایجاد کنید.

import { multiplication } from "../math"

it("return 6 when multiply 3 by 2", () => {
  expect(multiplication(3, 2)).toEqual(6)
})

it("multiply 3 by 2 is not 10", () => {
  expect(multiplication(3, 2)).not.toEqual(10)
})

it("multiply 3 by 2 is greater than 5", () => {
  expect(multiplication(3, 2)).toBeGreaterThan(5)
})

it("multiply 3 by 2 is less than 7", () => {
  expect(multiplication(3, 2)).toBeLessThan(7)
})
 

در کد بالا دو سناریو اول تکراری است ولی متد آن‌ها فرق می‌کند. همه این متد‌ها برای تست است که برای آشنایی بیشتر می‌توانید به داکیومنت  jest مراجعه کنید. متد toBeGreaterThan این کار را برای این انجام می‌دهد که نتیجه باید بزرگ‌تر از عددی که قرار داده‌ایم باشد و متد toBeLessThan کاملا برعکس آن است.

تست تابع subtraction

import { subtraction } from "../math"

it("return 6 when 10 minus 4", () => {
  expect(subtraction(10, 4)).toBe(6)
})

تست تابع division

 
import { division } from "../math"

it("return 6 when 12 divided by 2", () => {
  expect(division(12, 2)).toEqual(6)
})

خلاصه

در این مقاله به اهمیت تست و چرا باید از تست استفاده کنیم پرداختیم. همچنین با jest که یک فریمورک برای تست هست، آشنا شدیم و برای درک بهتر چند تست ساده نوشتیم در بخش دوم به نوشتن تست در nodejs می‌پردازیم.

گردآوری و تالیف محمدرضا مصلی
آفلاین
user-avatar

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

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید