PDA

View Full Version : حرفه ای: تست کد، توابع، فریمورک های جاوا اسکریپت



forodo
سه شنبه 29 تیر 1395, 22:35 عصر
سلام
خسته نباشید دوستان
من تا اونجایی که می دونم میشه توابع جاوا اسکریپت رو تست کرد.
خیلی توی اینترنت نگشتم.
ولی یه چرخی زدم و فهمیدم که تسترهایی مثل Mocha و Jasmine رو داریم.
Chai و Sinon هم انگار هست.
می خواستم بدونم دقیقاً کار اینا چیه؟
Mocha و Jasmine و Chai و Sinon چه فرقی با هم دارند و کلاً اینجور تستا برای چیه؟
و
داکیومنتی که خوب توضیح داده باشه و یا اگر فیلم آموزش باشه معرفی کنید ممنون میشه.
اگر فارسی باشه که خیلی بهتره. الفباش رو یاد بگیریم بعد بریم برای انگلیسی.
باتشکر

SCoder
چهارشنبه 30 تیر 1395, 14:12 عصر
با mocha خیلی کم کار کردم ولی با jasmine زیاد و هدف از وجود این فریم ورک ها همین طور که خودتون گفتید تست یه شی یا تابع یه به طور کلی هر قطعه ی کدی که نوشته اید هست برای این منظور می توانید عناوینی مثل test driven development و یا behavior driven development رو سرچ کنید که هر دو مفهومی نزدیک به هم دارند به عنوان مثال TDD منظور از این هست که قیل از نوشتن یه تایع به عنوان مثال اول تست مربوط به اون تابع رو بنویسید و سپس تست رو اجرا کنید و مشاهد کنید که تست fail میشود و سپس شروع به نوشتن خود تابع کنید که به طور خلاصه با مراحل زیر :
1- write tests for new feature
2- see tests fails
3- (write actual code (make tests pass
4- improve your code
5- goto step 1
به عنوان مثال در jasmine برای تست یه تابع که چند عدد رو میگیره و میانگین اعداد رو میده به صورت زیر ابتدا تست رو مینویسیم :





//avg.spec.js
//in BDD style


describe('avg Function',function(){


it('should take at least one paramter(Number) or throw an error',function


(){
expect(function(){avg('str');}).toThrow();
expect(function(){avg();}).toThrow();
});


it('should return average of given numbers',function(){

expect(avg(2,2)).toBe(2);
expect(avg(1,2,3)).toBe(2);
expect(avg('1','2')).toBe(1.5);
// more tests goes here
});


});




اکنون source :




//avg.js
function avg(){
var args = Array.prototype.slice.call(arguments),
err = function(msg){throw new Error(msg);};
return /^\d+$/g.test(args.join('')) ? (args.reduce(function(a,b){return parseInt(a)+parseInt(b);},0)/args.length) :err


('give this function number ');
}


و این کار (نوشتن test) قبل از نوشتن سورس اصلی مزایای زیادی داره که مهم ترین باعث میشه که ویژگی های کلاس و یا تابعی که مینویسی قبل از نوشتن فکر کنی و اون ها رو مورد تست قرار بدی و هم چنین از نظر من بهترین ویژگی زمانیه که بعد از دو ماه میخواهی یک feature جدید به اپت اضافه کنی که با اضافه کردنش کد هات به هم میریزه و درست کار نمیکنه میتونی تست ها رو اجرا کنی و ببینی که کدوم ناحیه به مشکل بر خورده و اون رو اصلاح کنی و خیلی فایده های دیگه که میتونی تو documentation خود jasmine به دنبال چرایی استفاده از فریم ورکی مثل jasmine باشی ...
http://jasmine.github.io (http://jasmine.github.io/)

موفق باشید ...