نود.جی.اس قهرمان – واحد تست در Node.js

نود.جی.اس قهرمان – واحد تست در Node.js

این نهمین پست از سری آموزش Node Hero است – در این فصل ها یاد خواهید گرفت چطور از Node.js استفاده کنید و چطور با استفاده از آن محصولات نرم افزاری توسعه دهید.

در این آموزش خواهید دید که واحد تست (unit test) در Node.js چیست و چگونه به درستی برنامه خود را تست کنیم.

فصل های گذشته و آینده:

  1. شروع کار بار Node.js
  2. استفاده از NPM
  3. درک مفهوم برنامه نویسی async 
  4. ساخت اولین سرور Node.js 
  5. دسترسی به دادهای درون دیتابیس 
  6. برقراری ارتباط با API 
  7. سازماندهی ساختار پروژه 
  8. احراز هویت کاربران 
  9. تست نرم افزار Node.js [در حال خواندن آن هستید]
  10. اشکال زدایی Node.js
  11. امنیت برنامه
  12. انتقال برنامه Node.js به Host اشتراکی
  13. نظارت بر روی برنامه Node.js

 

تست برنامه Node.js

می توان تست‌ها را در برنامه به عنوان یک نگهبان در نظر گرفت. آنها نه تنها در سیستم لوکال اجرا می شوند بلکه بر روی سرویس های CI نیز اجرا می شوند. بنابراین build ناموفق به برنامه production اضافه نمی شود.

تست‌ها بیش از یک نگهبان عمل می کنند – آنها موجودیتی برای کدهای شما ارائه می دهند. @RisingStack

شاید این سوال در ذهن شما مطرح شود که چه چیز از برنامه نوشته خود را باید تست کنم؟! چه تعداد تست باید داشته باشم؟!

جواب استفاده از use-case است. اما به عنوان یک قاعده کلی می توانید دستورالعمل های تست هرمی را دنبال کنید.

آموزش ساخت برنامه در node.js

اساسا، هر هرم تست شامل واحد تست، ادغام تست ها و end-to-end است. شما می بایست تست های ادغام بیشتری نسبت به تست ها end-to-end و حتی واحد تست داشته باشید.

اجازه دهید نشان دهیم که چطور می توان یک واحد تست را می توان به برنامه اضافه کرد!

لطفا توجه داشته باشید ما قصد نداریم اینجا درباره ادغام تست ها و تست های end-to-end صحبت کنیم، اینها خارج از بحث این آموزش هستند.


واحد تست در برنامه های Node.js

ما واحد تستی را خواهیم نوشت که نشان دهد ماژول داده شده درست کار می کند یا نه! تمام dependency برنامه بررسی می شود ما از ماژول های فرضی استفاده می کنیم.

شما باید برای متدهای عمومی که نوشته اید تست بنویسید و لازم نیست برای متدهای داخلی ماژول تست بنویسید.

ساختار کلی Unit Test

هر واحد تست شامل ساختار زیر است:

  1. راه اندازی تست
  2. فراخوانی متدهای تست
  3. Asserting

ماژول های مورد استفاده برای Node.js Unit Test

برای unit testing، قصد داریم از ماژول های زیر استفاده کنیم:


Spies، Stubs و Mocks – کدام یکی و چه وقت؟

قبل از اینکه برخی از تست ها را انجام دهیم، اجازه دهید نگاهی به spiesstubs و mocks بیندازیم و ببینیم چه هستند!

 

Spies

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

Stubs

Stubs همانند spies می باشند با این تفاوت که با مقصد تابع جایگذین می شوند. می توانید از stubs برای کنترول رفتار متدها مثل throw error یا برای جلوگیری از فراخوانی منابع خارجی (مثل HTTP) شود.

 

Mocks

یک mock متدی جعلی همراه با رفتار و انتظارات از پیش برنامه ریزی شده است.

همانطور که مشاهده می کنید برای mockها باید انتظارات را در ابتدای صف نوشت.


فرض کنید می خواهید ماژول زیر را تست کنید:

این ماژول یک کار را انجام می دهد: یک صفحه وب را بر اساس URL داده شده در یک فایل در سیستم ذخیره می کند. برای تست این ماژول باید از stub برای هر دو ماژول fs و request استفاده کرد.

قبل از اینکه شروع به نوشتن تست برای این ماژول کنیم، معمولا از فایل setup.spec.js برای تست پایه ای استفاده می کنیم. این کدها باعث شوند در نوشتن ()sinon.sandbox.create و ()sinon.sandbox.restore بعد ار هر تست صرفه جویی کنید.

همچنین توجه داشته باشید که ما همیشه فایل های تست را در هر پیاده سازی با نام .spec.js اضافه می کنیم. در فایل package.json می توانید خط زیر را پیدا کنید:

وقتی این کار را انجام دادید زمان آن است که تست های خودتان را بنویسید!

 

تست در node.js


قدم بعدی

تست می تواند شما را از بسیاری مشکلات خلاص کند اما بدیهی است که هر دفعه باید اشکال زدایی کنیم. در بخش بعدی از Node Hero یاد خواهید گرفت که چطور برنامه Node.js را اشکال زدایی کنید.