در این مطلب به بررسی موضوع 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 میپردازیم.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید