مقالات

اجرای تست های Golang با Jest


در چند ماه گذشته، تمرکز زیادی بر روی آزمایش چندین پروژه در React داشته‌ام، که باعث شد تا چیزهای زیادی در مورد Jest بشنوم: پلتفرمی برای تست پیکربندی صفر و بازخورد فوری برای کد جاوا اسکریپت. این ابزاری است که من منتظر آن بودم تا به من کمک کند تا ارزش واقعی آزمایش کدم را بدون دردسر ارزیابی کنم، به لطف UX عالی، ویژگی حالت نمایش، فیلتر الگوهای نام فایل یا توانایی آزمایش فقط فایل‌های اصلاح‌شده. با این حال، از آنجایی که من معمولا روی یک پشته Golang + React کار می کنم، هر زمان که مجبور بودم روی کد Go تمرکز کنم، بازگشت به استفاده از آن همیشه سخت بود. go test از آنجایی که شما از Jest و ویژگی های آن بسیار لذت می برید. علاوه بر این، این نیاز به جابجایی زمینه بین پلتفرم‌های تست Javascript و Go دارد.

چند هفته پیش، من این افتخار را داشتم که در مورد “Jest به عنوان یک پلت فرم آزمایشی” از یکی از مشارکت کنندگان اصلی پروژه Jest، Rogelio Guzman، و به خصوص بشنوم. دونده های شوخی و آنچه می توانند به دست آورند. برای کسانی که می خواهند مقدمه ای عالی در مورد اینکه Jest چیست و چه مشکلی را حل می کند، می خواهند، به شدت توصیه می کنم سخنرانی او را در React Conf 2017 بررسی کنند.

داستان دوندگان جوک به من الهام بخشید و چند روز بعد نوشتم شوخی-دونده-برو، یک برنامه شوخی که به هر کسی اجازه می دهد تا تست های Golang را با استفاده از پلتفرم Jest و ویژگی های آن اجرا کند.

اول، جست رانر چیست؟

به طور خلاصه، Jest از بسته‌های متعددی تشکیل شده است که هر کدام مسئول یک مرحله خاص در چرخه عمر آزمایش شما هستند. دونده ها بسته هایی هستند که بر روی تست های “دویدن” تمرکز دارند. Jest یک رابط برای اتصال رانر خود به بسته رابط، که مسئول یافتن فایل‌ها، ارائه UX و فیلتر کردن است، و بسته گزارش که اساساً خروجی آزمایش‌های شما را مدیریت می‌کند، ارائه می‌کند.

نموداری که چرخه عمر اجرای آزمایشی با Jest را نشان می‌دهد، شامل چندین اجراکننده Jest.

قابلیت افزودن دونده های سفارشی در صورتی که بخواهید انواع دیگری از تست ها را غیر از تست های پیش فرض پشتیبانی شده توسط Jest اجرا کنید، جالب است. در مورد jest-runner-go، دونده به سادگی می دود go test در برابر تمام فایل‌های تست Go یافت شده توسط رابط Jest و تجزیه خروجی به گونه‌ای که بسته گزارش Jest بتواند آن را درک کند و نتایج را به روشی قابل خواندن برای انسان ارائه دهد.

استفاده از jest-runner-go با جست

استفاده از Jest برای آزمایش هر دو باطن Golang و React برنامه، آرامش خاطری را برای من به ارمغان آورده است، به خصوص هنگام اجرای آزمایش‌ها در حین CI: خروجی در پشته من در هنگام اجرای آزمایش‌های من ثابت و واضح است. همچنین، من ویژگی هایی دریافت می کنم که با آنها در دسترس نیستند go tests مانند حالت مشاهده خود یا اجرای تست ها با یک مدل خاص که باعث می شود تجربه اجرای تست ها در Go بهتر شود.

برای ادغام jest-runner-go در پروژه خود، ابتدا اجرا کنید yarn add jest jest-runner-go سپس فقط موارد زیر را به پیکربندی Jest که استفاده می کنید اضافه کنید jest.config.js یا پیکربندی خاصی که باید با آن منتقل شود --config پرچم در راه اندازی Jest یا حتی package.json از پروژه:

1

"moduleFileExtensions": \[

4

"runner": "jest-runner-go",

بعد از آن اجرا jest یا jest --config my-go-test-config همه فایل های منطبق را پیدا خواهد کرد _test.go، برآورده شد go test در برابر هر یک از این فایل ها و در نهایت تجزیه خروجی تولید شده توسط go test بنابراین Jest داده هایی را که برای خروجی نیاز دارد دریافت می کند.

همانطور که قبلاً اشاره کردم، بیشتر موارد استفاده من از jest-runner-go در کنار jest-runner کلاسیک هر زمان که یکی از پروژه های من از Go و React استفاده می کند، شامل می شود. امکان اجرای تست ها در دو طرف پروژه در یک اجرای آزمایشی با استفاده از آن وجود دارد --projects برچسب‌گذاری و ارسال چندین پیکربندی Jest. در مثال زیر، پیکربندی قبلی را به یک فایل پیکربندی به نام اضافه کردم gojest.config.js و سپس از دستور زیر در یک پروژه کوچک تولید شده با استفاده کنید create-react-app که شامل تعدادی کد Go با تست های واحد نیز می شود:

اجرای Jest با پیکربندی های متعدد Jest

1

jest --projects jest.config.js gojest.config.js

که نتیجه زیر را به ما می دهد:

شوخی-دونده-بیا ضبط شده توسط maxime_asciinema.org

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

این مقاله روی استفاده از jest-runner-go برای اجرای تست های Go به همراه تست های جاوا اسکریپت تمرکز زیادی دارد، اما اگر بخواهیم فقط از آن برای آزمایش کد Go استفاده کنیم، چه؟

این مورد دشوار است زیرا بسیاری از صاحبان پروژه Go نمی‌خواهند برای اجرای آزمایش‌های خود و هر چیزی که همراه آن است به Node وابستگی داشته باشند: node_modules پوشه، الف package.json و پیکربندی Jest.

به همین دلیل شروع به کار کردم Gojest: یک باینری مستقل برای اجرای تست های Go با استفاده از چارچوب Jest و jest-runner-go. این پروژه برای Linux، macOS و Windows با استفاده از pkg کامپایل شده است و در اینجا در دسترس است. این کاملاً تجربی است و بدیهی است که با توجه به جدید بودن و عدم استفاده گسترده پروژه و دونده جوکی در حال حاضر، قرار نیست در تولید استفاده شود.

اگر می‌خواهید آخرین نسخه Gojest را دریافت کنید، می‌توانید باینری‌ها را از صفحه انتشار پروژه دانلود کنید یا با استفاده از Docker آن‌ها را با اجرای موارد زیر نصب کنید:

برای macOS

دستور نصب gojest در macOS

1

docker pull maximeheckel/gojest:latest &&

2

id=$(docker create maximeheckel/gojest:latest) &&

3

docker cp $id:/gojest-macos /usr/local/bin/gojest && (docker rm \$id >/dev/null)

برای لینوکس

دستور نصب gojest در لینوکس

1

docker pull maximeheckel/gojest:latest &&

2

id=$(docker create maximeheckel/gojest:latest) &&

3

docker cp $id:/gojest-linux /usr/local/bin/gojest && (docker rm \$id >/dev/null)

برای ویندوز

دستور نصب gojest در ویندوز

1

docker pull maximeheckel/gojest:latest &&

2

id=$(docker create maximeheckel/gojest:latest) &&

3

docker cp $id:/gojest-win.exe gojest.exe && (docker rm \$id >/dev/null)

در اینجا نمونه ای از استفاده از Gojest برای اجرای تست های واحد در پروژه Go آورده شده است:

Gojest تست های Docker را اجرا می کند ضبط شده توسط MaximeHeckel_asciinema.org

من واقعاً امیدوارم که jest-runner-go و Gojest را به اندازه کافی پایدار کنم تا در مدت زمان مناسبی توسط انجمن Go مورد استفاده قرار گیرد. اگر می‌خواهید مشارکت کنید یا بازخورد بدهید، هر دو پروژه در Github در دسترس هستند

درخواست کشش بیش از حد استقبال می شود.


Source link

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

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

دکمه بازگشت به بالا