Javascript kodini sinab ko'rish.

Kontaktlar / topshirish

Golovna

Muammolarni bartaraf qilish; nosozliklarni TUZATISH

Samarali test holatlarini yaratish yirik loyihalar uchun juda muhim bo'lishi mumkin, chunki dastur qismlarining xatti-harakatlari turli sabablarga ko'ra o'zgarishi mumkin. Ehtimol, eng keng tarqalgan muammo, bir xil narsa yoki boshqa modullar ustida ishlaydigan ishlab chiquvchilarning katta guruhi mavjud bo'lganda. Bu boshqa dasturlar tomonidan yozilgan funksiyalarning xatti-harakatlarida rejalashtirilmagan o'zgarishlarga olib kelishi mumkin.

Yoki robot muqarrar ravishda dasturning muhim qismlarini muqarrar ravishda o'zgartirishga olib kelishi kerak.

  • Veb-dasturlar bilan test qilish sahifa elementlarini vizual baholash va funksionallikning foydaliligini empirik baholashga asoslangan.Shunday qilib, bo'limlar orqali o'tishda dinamik elementlarda shunga o'xshash harakatlar mavjud. Bu yil loyiha yangi bilan yangilanadi
  • funktsional imkoniyatlarShunday qilib, bo'limlar orqali o'tishda dinamik elementlarda shunga o'xshash harakatlar mavjud. Bu sizning ishingizni tekshirish jarayonini murakkablashtiradi.

Vikoristikani avtomatlashtirish uchun birlik testidan foydalaning.

Sinov stsenariylarini yaratishda ikkita yondashuv mavjud:

Rivojlanish shartlarini aniqlash uchun sinov xarajatlarini baholash muhimdir.

Albatta, agar siz vaqt bilan cheklanmasangiz, terining funktsiyasi testlaridan foydalanishingiz mumkin.

Agar tergov og'ir vaqt bosimi ostida o'tkazilsa, tahlilchi yoki yaxshi tushunilgan tergovchi sifatida test o'tkazish kerak.

Bundan tashqari, testlarni yozish loyiha muvaffaqiyatiga yordam beradi.

Shu tarzda, agar siz modulli vipravdana vikoristanya qilsangiz, 3 turni shakllantirishingiz mumkin:

1) Agar testlar afzalliklarni aniqroq ochib berishga imkon bersa, ularni izlash shart emas. 2) Ovqatlanish soatini qisqartiring 3) Tez-tez o'zgarib turadigan kodni sinab ko'rishga ruxsat bering. Frontendning uchta asosiy komponenti (HTML, CSS, JavaScript), hatto JavaScript kodini ham sinab ko'rish kerak. Ishlab chiquvchi/sinovchi/tadqiqotchi unga qaraganida CSS faqat vizual usul bilan tekshiriladi.

grafik interfeys

V

  • turli brauzerlarda.
  • HTML belgilash shu tarzda tekshiriladi. Yak testuvati
  • Kundalik sinov stsenariylari bo'lsa, iz quyidagi printsiplarga asoslanadi: Qaynotalaringiz iloji boricha kechirimli bo'lishga harakat qilishadi.
  • Shunda amalga oshirish natijalariga siz takrorlamoqchi bo'lgan xato ta'sir qilish ehtimoli katta bo'ladi. Ajoyib modullarning testlarini ajrating.
  • Rahm-shafqatning o'ziga xos joyini bilish yaxshidir. Testlarni mustaqil qiling.

Bir sinovning natijasi har doim ham boshqasining natijalariga bog'liq emas.

Sinov natijalari juda takrorlanadigan va izchil bo'lishi mumkin.

Albatta, agar siz testni qaytadan o'tkazsangiz, natija avvalgidek bo'ladi.

Har qanday sababga ko'ra, Wikonian dasturi test skriptlarini yaratishi mumkin.< int; i ++) { result = result * 2; } return result; } window.returnFunc = function() { return "ok"; } })();

Shunday qilib, siz samarali tuzatish xatosi koristuvachlarda o'zini namoyon qilmasligiga amin bo'lasiz.

Chim testuvati

Ko'rib turganingizdek, QUnit tuzilgan kod natijalarini tenglashtirish uchun 3 ta funktsiyani qo'llab-quvvatlaydi:

  • Kelishdikmi()- agar natija = rost bo'lsa, test muvaffaqiyatli hisoblanadi
  • teng()- Natijani tozalash bilan tenglashtiradi
  • deepEqual()- Natija natijaga teng, turini tekshirish

Vikonanny natijasi:

Ko'rinishidan, QUnit kutubxonasi bir vaqtning o'zida bir nechta brauzerlar uchun kodni sinab ko'radi.

Bu birlik testlari uchun boshqa kutubxonalarning kam mavjudligi bilan bog'liq.

Biroq, ulardagi test stsenariylarining kontseptsiyasi bir xil, shuning uchun siz biridan oshib ketganingizdan so'ng, boshqasiga o'tishingiz muhim emas.

Iltimos, esda tuting

Kundalik JS kodining o'ziga xos xususiyati uning asinxronligidir.

Sinov kutubxonalari asinxron testlarni o'tkazish imkoniyatini beradi.

Agar siz, masalan, backendga get so'rovini yuboradigan va natijani qaytaradigan funksiyaga e'tiroz bildirmoqchi bo'lsangiz, testlarni o'tkazish uchun stop() funksiyasi bilan oqimni to'xtatishingiz, funktsiyani ishga tushirishingiz kerak bo'ladi. sinab ko'rish uchun, so'ngra setTimeout() da start( usuli ), "Yogoni o'rash" yordamida oqimni qayta ishga tushiring.

  • Tobto.
  • Siz toj o'rnatish funktsiyalari tugallanadigan har bir vaqt oralig'ida staking uchun javobgarsiz.
  • Ushbu bo'limning ahamiyatsizligini diqqat bilan tanlash kerak, chunki...
  • Bir tomondan, robot usuldan foydalanishga harakat qildi, bu xususiyat sifatida hisobotning funktsional imkoniyatlarini aniq amalga oshirish zarurati va noto'g'ri xatti-harakatlarga olib kelishi mumkin.

Backbone qo'shimchalarini sinovdan o'tkazish

Backbone.js wiki-dan foydalangan holda yozilgan qo'shimchalarni amaliy sinovdan o'tkazish uchun u -da tasvirlangan loyiha tomonidan tezlashtirilgan.

Birlik testlari quyidagilarni tekshirish uchun ishlatilishi mumkin:

Modellar va kontrollerlarni yaratishning to'g'riligi

Model ma'lumotlarining to'g'riligi

QUnit testlari brauzerda ishlaydi.

Phantomjs bizga ushbu xususiyatni aylanib o'tishga yordam beradi - brauzer robotiga taqlid qiluvchi dasturiy ta'minot.< Default Max Timout is 3s start = new Date().getTime(), condition = false, interval = setInterval(function() { if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) { // If not time-out yet and condition not yet fulfilled condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code } else { if(!condition) { // If condition still not fulfilled // (timeout but condition is "false") console.log(""waitFor()" timeout"); phantom.exit(1); } else { // Condition fulfilled (timeout and/or condition is //"true") console.log(""waitFor()" finished in " + (new Date().getTime() - start) + "ms."); typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it"s supposed to do once the // condition is fulfilled clearInterval(interval); //< Stop this interval } } }, 100); // repeat check every 250ms }; }; if (phantom.args.length === 0 || phantom.args.length >Phantomjs ishlab chiquvchilari QUnit testlari uchun skriptni allaqachon topshirishgan va to'g'ri ishlash uchun biroz keyingi ishlov berish mumkin edi.

/** * Miya testi ro'y berdi yoki vaqt tugadi.

* Server javobida * kutish yoki foydalanuvchi interfeysi o'zgarishi (fadeIn va boshqalar) uchun foydalidir.* * @param testFx javascript sharti mantiqiy qiymatga baholanadi, * u satr sifatida uzatilishi mumkin (masalan: "1 == 1" yoki * "$("#bar").is(":visible")" yoki * qayta qoʻngʻiroq funksiyasi sifatida (":visible")" yoki * qayta qoʻngʻiroq qilish funksiyasi sifatida. * @param timeOutMillis kutish uchun maksimal vaqt. Agar * koʻrsatilmagan boʻlsa, 3 soniya ishlatiladi. = timeOutMillis ?timeOutMillis: 3001, // 2) console.log("Foydalanish: run-qunit.js URL"); phantom.exit(); ) var page = new WebPage();// Sahifadagi // kontekstdagi "console.log()" qo'ng'iroqlarini asosiy Phantom kontekstiga (ya'ni joriy "bu") yo'naltirish page.onConsoleMessage = function(msg) ( console.log(msg); );

page.open(phantom.args, function(status)( if (status !== "muvaffaqiyat") ( console.log("Tarmoqqa kirish imkoni yo'q"); phantom.exit(); ) else ( waitFor(function()) ( return page.evaluate(function())( var el = document.getElementById("qunit-testresult"); if (el && el.innerText.match("completed")) ( return true; ) return false; )) ; ), function())( var failedNum = page.evaluate(function())( var el = document.getElementById("qunit-testresult"); console.log(el.innerText); urinib ko'ring ( return document.getElementsByClassName( "fail" ) ).innerHTML.length; ) catch (e) ( return 0; ) return 10000; ));phantom.exit((parseInt(failedNum, 10) > 0) ? 1: 0);

Skript natijalarini konsolda testlar bilan ko'rsatish uchun siz jurnalga yozish funktsiyasini qo'shishingiz kerak. ) var page = new WebPage(); Kod sinovi - rivojlanishning ko'rinmas tsikli dastur

Agar JavaScript pishirish yoki menyu tayyorlash uchun ishlatilgan bo'lsa, soatlar qaytarib bo'lmaydigan tarzda o'tdi. Endi mustaqil til mavjud, ammo u mijozda ham, serverda ham yaxshi ishlaydi. JavaScript-ning roli haqiqatan ham rivojlandi, ya'ni kod yozishda boshqa dasturlash tillarida yaxshi ishlagan amaliyotlarga murojaat qilmaslik kerak.

Amaliyotlar va paradigmalarni nimani hurmat qilaman?

Birinchidan, me'moriy shablon

MVC (modelni ko'rish boshqaruvchisi)

va kodni tashkil etish naqshlari.

Ushbu oddiy fokuslarga rioya qilish orqali siz aniq kod yozishingiz mumkin, bu nafaqat amal qilish oson, balki avtomatik sinovdan o'tish imkonini beradi.

Menga kichik dastur ishlab chiqish vazifasi berilganga o'xshaydi.

Loyihaning funksionalligi uchun men eng qisqa muddatda amalga oshirgan eng oddiy CRM haqida o'yladim.

Shahardan kerakli vinoni yig'ib, barcha mahsulotimni deputatga topshirdim va oylar davomida loyihani unutib qo'ydim.

Keyin voqealar sodir bo'la boshladi.

  • Deputat dasturning funktsional imkoniyatlarini jiddiy ravishda kengaytirishga qaror qildi va mendan yordam so'radi.
  • Tabiiyki, men funktsiyadan keyin yangi funktsiya ustida ishlay boshladim.
  • Avvaliga bu qiyin emas edi, lekin funksionallikni to'g'ri integratsiya qilish haqida gap ketganda, mening orqamga kuchli xatolar paydo bo'ldi.

    Kod qarama-qarshilik qila boshladi va nizolarni hal qilish uchun ko'p soat sarflash kerak edi.

    "Agar siz talaba bo'lmasangiz, nega sizning qo'shimchangiz bilan bog'liq muammolar mavjud?"

    Birlik testini yoqtirmaydigan ishlab chiquvchilar birlik testi qo'shimcha kod yozish va qo'llab-quvvatlashdan foyda ko'rishini tasdiqlashni yaxshi ko'radilar.

    Aytgancha, haqiqiy loyihalarda ishlatiladigan atamalar ko'pincha qo'llaniladi va qo'shimcha kod yozish shunchaki mumkin emas.

    Men bu shartlarni yaxshi tushunaman, lekin yaxshi kod bilan ishlashga tayyorman.

    Bir tomondan, qaynotalar qo'shimcha kod chiqaradilar, keyin esa bir soat ichida yozadilar.

    Boshqa tomondan, ushbu kod avtomobildagi xavfsizlik yostiqchalarining rolini ta'kidlaydi va o'sib borayotgan dasturlar bilan o'zini to'laydi.

  • Agar xo'jayiningizni qiynash uchun etarli vaqtingiz bo'lmasa, siz testlarni yozish uchun ilhomlanasiz - bu haqda o'ylab ko'ring.
  • Bunday holda, hamma narsani sinab ko'rishga majbur bo'lishdan ko'ra, kodning faqat eng qiyin qismlarini testlar bilan qoplash yaxshiroqdir.
  • Oldindan o'ylab ko'ring, ehtimol, bir oy ichida sizning dasturingiz misli ko'rilmagan darajada o'sishi mumkin.
  • Har bir kod sinovdan o'tkazilmaydi

    Nega men asosiy kodni yozishdan oldin test haqida qayg'urishingiz kerakligini ta'kidlayman? Chunki dastlab birlik testlariga o'tkaziladigan kod butunlay boshqacha uslubda yozilgan.

    Har bir kodga e'tiroz bildirish mumkin emas. Mantiq va ko'rinishlar birlashtirilgan kodga odatda norozilik bildirish mumkin emas. Bu erda, birinchi navbatda, men bir nechta oddiy qoidalarga amal qilaman: Katta funktsiyalarni yozishning hojati yo'q. Teri funktsiyasi 100 500 ta mumkin bo'lgan vaziyat uchun emas, balki bitta muammo uchun javobgardir.

    Masalan, serverga ma'lumotlarni yuborish uchun kodni funktsiyaga kiritishning hojati yo'q, bu uning tayyorligini ko'rsatadi;

    Index.html – test natijalarini aks ettiruvchi asosiy fayl;

    - qunit-1.12.0.js – qunit kutubxona fayli;

    - example.js – sinov uchun kodni o'z ichiga olgan fayl (bu trim() funksiyasini tavsiflaydi); - test.js – testlar bilan fayl;- qunit-1.12.0.css – testlardan ma'lumotlarni formatlash uchun uslublar;

  • index.html va test.js fayllari oʻrniga 1 va 2-listlarda koʻrishlar mavjud. Biz uchun sinovdan oʻtayotgan funksiyalarni (trim()) va tekshirish uchun test kodini oʻz ichiga olgan boshqa roʻyxatni keltirganimiz maʼqul. uning samaradorligi. Esda tutingki, trim() funksiyasining oʻzi, agar men uni boshqa roʻyxatga kiritsam, jurnaldagi joyni tejash uchun kengaytirilishi mumkin.
  • Kelishdikmi() Endi sinovlarning o'ziga hayron bo'laylik.
  • teng() Kodimizning foydaliligini tekshirish uchun Qunit.js bizga past usullarni o'rgatadi:
  • test()- xamirni tasvirlash uchun gorelka;
  • - Tasdiqlash birinchi parametrning haqiqatini tekshirish imkonini beradi. Bizning ilovamizda men uning chiqishini trim() funktsiyasiga va kesish uchun tekshiradigan qiymatlarni tenglashtirishga o'tkazaman.
  • Agar aql rost bo'lsa, sinovdan o'tadi;– usul birinchi va boshqa parametrlarning muvofiqligini tekshirish imkonini beradi.
  • deepEqual() Men buni juda qadrlayman
  • Daniya usuli Bu qat'iy tekshirishga ruxsat bermaydi, bu faqat skalyar miqdorlar uchun mos keladi;
  • notEqual()- Protil teng().
  • Bu boshqasidan muhimroq deb hisoblanadi; - Tasdiqlash birinchi parametrning haqiqatini tekshirish imkonini beradi. strictEqual()

    – teng() ga o‘xshash, bitta istisno bilan – u qat’iy tekshirishni amalga oshiradi (ya’ni, boshqa ma’lumotlar turini tekshiradi);

    notStrictEqual()

    – strictEqual() usuli;

    – ibtidoiylar, massivlar, ob'ektlar uchun qo'llaniladigan rekursiv qattiq jismlar uchun usul;

    notDeepEqual() – deepEqual() usuli; Nihoyat biz birga bo'ldik. ) var page = new WebPage(); Iltimos, meni qabul qiling va boshqa hech narsa qo'shmang.

    Keyin siz haqiqiy kodni olishingiz va testlarni o'zingiz yozishga harakat qilishingiz kerak.

    Ajablanarlisi shundaki, muammo ko'pincha ayblanadi -Tadqiqotchilar - asinxron funksiyalarni tekshirish. JavaScript kodi bilan yozilgan dastur Ajax yordamida server tomoni bilan 99% o'zaro ta'sir qiladi. Nega men asosiy kodni yozishdan oldin test haqida qayg'urishingiz kerakligini ta'kidlayman? Testlar biroz boshqacha yozilmasa, ushbu kodni qayta ko'rib chiqmasdan olib tashlash ham mumkin emas.

    Keling, dumbani ko'rib chiqaylik: Nega men asosiy kodni yozishdan oldin test haqida qayg'urishingiz kerakligini ta'kidlayman? AsyncTest("myAsyncFunc()", function() ( setTimeout(function() ( ok(myAsyncFunc() == rost, "Ma'lumotlar muvaffaqiyatli uzatildi"); start(); ), 500); ));

    Ushbu misolning asosiy afzalligi shundaki, test() burner o'rniga u asyncTest() ga aylanadi va shu bilan testning o'zi asinxron sinov bo'lishi kerakligini e'lon qiladi.

    Keyin men 500 ml ho'llashni bir soat boshlayman.

    sek.

    Bu soat davomida myAsyncFunc() funksiyasi maʼlumotlarni test serveriga oʻtkazishi kerak va hammasi rostga oʻrnatiladi.

    Funktsiya KeyLogger(maqsad) ( agar (!(keyLoggerning bu namunasi)) ( yangi KeyLogger(target); ) qaytaring ) this.target = target; this.log = ; var self = this; this.target.off("keydown") .on("keydown", funktsiya(voqea) ( self.log.push(event.keyCode); ));

    Keling, norozilik bildirish funktsiyasini sinab ko'raylik. Avvalo, test paytida biz bosilgan tugmani bosishimiz kerak. Eng oson yo'li - kutubxonadan yordam olish

    jQuery

    , bu sizga bir qator kod qatorlarini yaratish imkonini beradi (div. Listing 4).

    Listing 4. KeyLogger uchun test kodi

    test("Kalitlar jurnalini tekshirish", function() (var hodisa, $doc = $(hujjat), kalitlar = KeyLogger($doc); voqea = $.Event("keydown"); event.keyCode = 9; $doc .trigger(voqea);equal(keys.log.length, 1, "Kalit qayd etilgan");

    Sinovning birinchi sahifasida men tugmachani bosishni taqlid qilish uchun tayyor usulni tayyorladim - "tugmachani pastga tushirish". - test.js – testlar bilan fayl; Tab tugmachasini bosishimiz kerak (kod 9).

    Keyin tayyorlangan namunani trigger() usuliga yuboraman, shundan so'ng biz sinovga o'tishimiz mumkin.

    Endi biz yashirin rasmni tekshiramiz - tugma bosilganmi, keyin esa kod.
    DOM sinovlar himoyasi ostida

    Bir marta

    o'z vositalaringizni sinab ko'rish imkonini beradi, keyin DOM uchun testlarni yozish hech qanday muammo tug'dirmaydi. - test.js – testlar bilan fayl; Bu haqiqat va men so'zlarimni tasdiqlash uchun pastga ishora qilaman. Men bu haqda izoh bermayapman, shunchaki kodga qarang va hamma narsa aniqroq bo'ladi: Test("Yangi div elementini qo'shish", function() ( var $fixture = $("#qunit-fixture"); $fixture.append("

    Narx div "); teng($("div", $fikstura).length, 1, "Yangi div muvaffaqiyatli qo'shildi!"); )); Phantom.JS - konsoldan ishlaydigan testlar Qo'shimcha kutubxona yordami uchun testlar yozing.

    Oddiy qilib aytganda, ushbu dastur brauzerdan foydalanadi. Phantom.js yordamida test natijalarini tekshirishni avtomatlashtirish haqiqatan ham oson emas, balki ishlab chiquvchiga duch kelishga hali erta bo'lgan shaxssiz muammoni hal qilish: fayldagi sahifalarni ko'rsatishdan natijalarni olish (png) , jpg), chegara monitorining funktsiyalari (w obsesyonning ko'rinishi, yashirin mahsuldorlik va boshqalar).

    d.), keyin harakat koristuvach emulyatsiyasi. Men sizga ushbu loyiha uchun rasmiy hujjatlarni ko'zdan kechirmaslikni va o'qib chiqmaslikni maslahat beraman, siz o'zingiz uchun nima kerakligini aniq bilib olasiz. Phantom.js

    Turli platformalarda (nix, mac OS X, windows) yuklab olish mumkin.<путь к run-qunit.js> <путь к странице с тестами>

    Agar siz hamma narsani Windows ostida qursangiz, unda juda ko'p umumiy muammolar mavjud - ikkilik fayllardan xalos bo'ling va oldinga intiling.

    Agar ikkita video adapter, bitta NVidia o'rnatilgan bo'lsa, ishga tushirish bilan bog'liq kichik muammolar paydo bo'lishi mumkin.

    Bunday vaziyatda siz tezda hackdan foydalanishingiz kerak bo'ladi, biz buni vrezannada tasvirlab beramiz.

    Keling, phantom.js bilan amalda tanishishga harakat qilaylik.

    O'tib ketsin

    Bir kun ichida oddiy funktsiyalar uchun testlarni yozish (statistikadagi ilovalardan bir xil trim() ni olish) mantiqiy emas, aniqrog'i kodning eng muhim bo'limlariga e'tibor qaratish.

    Tez-tez o'zgarib turadigan kodni yozishda ushbu qoidaga amal qiling.

  • Jonli loyihaning texnik xususiyatlari tez-tez o'zgarib turadi va xususiyatlar doimiy ravishda yangilanishi kerak.
  • Bunday o'zgarishlar yoqimsiz daqiqalarni keltirib chiqarishi mumkin - yangi ma'lumotlar o'zgarishi bilan kod yaxshiroq ishlaydi va eskilari organik ravishda o'zgartirilmaydi.
  • Bu erda muvaffaqiyatsizlikka yo'l qo'ymaslik uchun darhol bunday funktsiyalarni testlar bilan qoplash yaxshiroqdir.
  • Oddiy qoidani eslang - butun kodni eng muhim qismini qamrab olgan testlar bilan qoplash ko'p vaqt talab qilmaydi.
  • Yaxshi testlar uchun qoidalar

    Sinov imkon qadar kechirimli bo'lishi mumkin.

    Sinov qanchalik murakkab bo'lsa, yangi eksperimentga ishonchingiz ko'proq bo'ladi; Men sizga ushbu loyiha uchun rasmiy hujjatlarni ko'zdan kechirmaslikni va o'qib chiqmaslikni maslahat beraman, siz o'zingiz uchun nima kerakligini aniq bilib olasiz. Dasturlarning qo'shiq qismlarini sinab ko'rish imkoniyati va afzalliklarini topish osonroq bo'lishi uchun testlarni modul bo'yicha guruhlash kerak; Teri testi boshqa testlar bilan bir xil emas; Agar teridagi xatolarni sezsangiz, avval test yozing; Men sizga ushbu loyiha uchun rasmiy hujjatlarni ko'zdan kechirmaslikni va o'qib chiqmaslikni maslahat beraman, siz o'zingiz uchun nima kerakligini aniq bilib olasiz. Windowsda phantom.js bilan bog'liq muammolar

  • Bu allaqachon sodir bo'lgan, lekin shu paytgacha barcha ilovalarni men Linuxda emas, balki eski yaxshi Windows 7 da sinab ko'rdim. Ma'lum bo'lishicha, phantom.js bir qancha video adapterlardan foydalanadigan tizimlarda ishlayotganida kichik muammolar bor ekan.
  • Noutbukimda, o'rnatilgan video chipiga qo'shimcha ravishda, NVidia hali ham ishlamoqda va phantom.js orqali phantom.exit() buyrug'iga javob berish qat'iyan talab qilinadi. Natijada, skript o'ldirilgandan so'ng, phantom.js jarayoni o'z ishini yakunlamadi va xotirada osib qo'yishda davom etdi. Terminal oynasi chiqish buyruqlariga ham javob berishi kerak edi (ctrl + c - hech qanday yordamsiz).
  • Kelgusi mavzular bo'yicha bilimlarni sinab ko'rish endi saytda mavjud: HTML, CSS, ) var page = new WebPage();, PHP, SQL.

    Teri testi asoslanadi 10 Ularning qo'shiqlari bilan oziqlang.

    Mavjud bilimlaringizni iloji boricha aniqroq tekshirish uchun men aniq tilning eng murakkab sohalarida terining oziqlanishiga e'tibor qaratishga harakat qilaman. Aqldan ozgan, hamma xamirsiz

    Va har kim ulardan o'tishi mumkin.

    1. Sinov jarayoni: Ko'rsatmalarga amal qiling Testni chop eting
    2. sinovga muvofiq. Burish orqali quvvat yoqilganligini ko'rasiz birlashgan
    3. to'g'ri variant. Sinovni tugatgandan so'ng, siz ko'proq narsani bilib olasiz, o'z to'pingiz imtiyozlar soni , shu qatorda; shu bilan birga terining ovqatlanishini tahlil qilish

    Sinovdan. Hurmat!

    Birinchi ovqatdan oldin burilishga imkon yo'q, shuning uchun birinchi navbatda o'ylab ko'ring.

    1. HTML

      • Hozirda testlar mavjud Usyogo sinovdan o'tdi:
      • 75424 kishi Oʻrtacha ball: 5 dan 2,83

      baliv. HTML Asosiy bilim testi . Siz asosiy narsani bilishingiz kerak bo'ladi HTML teglari.

    2. CSS

      • Hozirda testlar mavjud , va ularga yanada to'g'ri ularning vikoristannya aytib.
      • 75424 kishi Bundan tashqari, standartning o'ziga xos xususiyatlarini tushunish kerak 5 dan 2,83

      XHTML 1.1 CSS 32828 osib

    3. ) var page = new WebPage();

      • Hozirda testlar mavjud 5 dan 3,37
      • 75424 kishi Sinov bilimlarni asoslardan tekshiradi 5 dan 2,83

      .

    4. PHP

      • Hozirda testlar mavjud Sinovdan muvaffaqiyatli o'tish uchun siz selektorlarning asosiy turlarini (ularning sintaksisini) bilishingiz, asosiy kuchlarni va ularning mumkin bo'lgan ma'nolarini bilishingiz, shuningdek, eng mashhur psevdo-elementlarning ma'nolarini bilishingiz kerak.
      • 75424 kishi 24845 os_b 5 dan 2,83

      5 dan 3,31 Ushbu test JavaScript-ni bilishingizni tekshiradi. Xamirdan olingan oziq-ovqat quyuq sutning turli sohalariga yopishadi.
      "Turli" nuanslarni tushunish uchun ko'p oziq-ovqat mavjud. Aks holda, siz asoslarni bilishingiz kerak bo'ladi: qanday ishlash kerak, JavaScript-ning asosiy funktsiyalari, operatsiyalarning ustuvorliklari va boshqalar.

    5. SQL

      • Hozirda testlar mavjud 33239 osib
      • 75424 kishi 5 dan 3.03 5 dan 2,83

      Ushbu test PHP tilini bilishingizni tekshiradi. Siz asosiy narsani bilishingiz kerak PHP qurilishi , o'zgarishlar, sessiyalar, qayta yo'naltirishni amalga oshirish va boshqa standart nutqlar bilan ishlash Perekonlive prohannya:

    Sinovda skript bo'yicha juda ko'p savollar mavjud: "Ssenariyni nima ko'ryapsiz?"

    Bu ajoyib, uni nusxalash yoki tekshirishning hojati yo'q.

    "O'zingiz bilan halol bo'ling. 18014 osib birlik sinovi(inglizcha) birlik sinovi) - to'g'riligini tekshirish imkonini beruvchi dasturlashtirilgan jarayon Modullardan tashqari Dasturdan chiqish kodi. G'oya, terining ahamiyatsiz funktsiyalari va usullari uchun testlarni yozishdir. Bu sizga la'nat kodining o'zgarishi sabab bo'lmaganligini tezda tekshirish imkonini beradi

    regressiya

    Shunday qilib, dasturlarning allaqachon sinovdan o'tgan joylarida tuzatishlar paydo bo'lishidan oldin, shuningdek, bunday tuzatishlarni aniqlash va olib tashlash engillashtiriladi."

    Vikipediyadan iqtibos.

    Kodingizning teri funktsional bloki uchun testlarni o'tkazing va agar barcha testlar o'tgan bo'lsa, siz muammolar soniga amin bo'lishingiz mumkin (asosiysi, haqiqiy testlar hajmiga bog'liq).

    Kodingizni sinab ko'rish vaqti keldi

    Birlik testining yana bir afzalligi (ayniqsa, veb-ilovalar uchun) brauzerlarning o'zaro aqldan ozishini sinab ko'rish oson.

    Siz turli xil brauzerlarda testlarni o'tkazishingiz kerak.

    Brauzeringiz bilan bog'liq muammolar mavjud bo'lsa, ularni tuzatib, testni qayta ishga tushirishingiz mumkin.

    Natijada, barcha brauzerlar sinovdan o'tgan ekan, barcha brauzerlar qo'llab-quvvatlanishini bilib olasiz.

    Natijada, barcha brauzerlar sinovdan o'tgan ekan, barcha brauzerlar qo'llab-quvvatlanishini bilib olasiz.

    QUnit bilan modul testlarini qanday yozish kerak Xo'sh, qanday qilib QUnit-da modul testlarini hech qanday qiyinchiliksiz yozishingiz mumkin? Birinchi qadam test markazini kiritishdir: QUnit test to'plami Sinov qilinayotgan kod faylda joylashgan

    myProject.js

    , va testlar joylashtiriladi myTests.js.

    Sinovlarni bajarish uchun brauzeringizda HTML faylni ochish kifoya.

    Endi bu testni yozish vaqti keldi.

    Qurilish blokining modulli sinovi tasdiqlangan. "Famol - bu sizning kodingiz bajarilganda paydo bo'ladigan natijani bashorat qiluvchi so'z. Agar prognoz noto'g'ri bo'lsa, u holda osmon muhim ahamiyatga ega. yolg'on

    , bu avf etishning mavjudligi haqida dalillarni ishlab chiqishga imkon beradi. index.html va test.js fayllari oʻrniga 1 va 2-listlarda koʻrishlar mavjud. Biz uchun sinovdan oʻtayotgan funksiyalarni (trim()) va tekshirish uchun test kodini oʻz ichiga olgan boshqa roʻyxatni keltirganimiz maʼqul. uning samaradorligi. Qattiq moddalarni sinash uchun ularni sinov bloki oldiga qo'yish kerak:

    // bu funktsiyaga e'tiroz bildirish isEven(val) ( return val % 2 === 0; ) test("isEven()", function() ( ok(isEven(0), "Nol - bu raqam"); ​​ok( isEven(2), "Ikki - bir xil"); ! isEven(-7), "Bu birlashtirilmagan raqam qanchalik salbiy" )) Bu erda biz funktsiyani nazarda tutamiz bu hatto

    , chunki u raqamning paritetini tekshiradi va biz bu funksiya paritet qiymatlarini aylantirmasligini o'zgartirmoqchimiz.

    Endi biz funktsiyani bosamiz blok sinovi bo'ladi. Birinchi parametr - natijada paydo bo'ladigan qator.

    Yana bir parametr - bu bizning qal'alarimiz uchun qasos olish uchun qaytarish funktsiyasi.

    // bu funktsiyaga e'tiroz bildirish isEven(val) ( return val % 2 === 0; ) test("isEven()", function() ( ok(isEven(0), "Nol - bu raqam"); ​​ok( isEven(2), "Ikki - bir xil"); ! isEven(-7), "Negativ bo'lsa - toq son");// Pomilka ok(isEven(3), "Uch - toq son" ))

    Sinov natijasida biz olib tashlaydigan birinchi o'q:


    Qattiqlik rahm-shafqat beradi va biz umidsizlikka tushib qoldik.

    Agar loyihangizda siz hech qanday sinovdan o'tmasangiz, lekin barcha qadamlar to'g'ri ekanligiga qaror qilsangiz, yechim topish yanada oson bo'ladi.

    Boshqa qal'alar

    ok() QUnit qo'llab-quvvatlaydigan bir xil bayonotlarni qo'llab-quvvatlamaydi.

    Loyihalaringiz uchun testlarni o'tkazishda osongina sinovdan o'tkazilishi mumkin bo'lgan boshqa turdagi qattiq moddalar mavjud: Sirtning qattiqlashishi Sirtning qattiqlashishi Kelishdikmi() teng() Kelishdikmi(), Sirtning qattiqlashishi birinchi parametr (faol qiymatlar) boshqa parametrga (hisoblangan qiymatlar) ekvivalent ekanligini uzatadi.

    Bu qattiqlik juda o'xshash

    Haqoratli ma'noni ko'rsatish uchun - kodni yaxshilashni osonlashtiradigan harakat va uzatish.


    Xuddi shunday

    Uchinchi parametr sifatida siz ko'rsatish uchun bildirishnoma olishingiz mumkin.


    Shuning uchun uni almashtiring

    Test("tasdiqlar", function() ( ok(1 == 1, "bittasi bittaga ekvivalent"); ))

    Vikorystuvati slaydlari:


    Test("tasdiqlar", function() ( teng(1, 1, "bitta birga ekvivalent"); ))

    E'tibor bering, satr oxirida uzatilgan qiymatlar ko'rsatiladi.

    Va qiymatlar teng bo'lmaganda:

    Test("tasdiqlar", function() ( teng(2, 1, "bitta birga ekvivalent"); ))

    Bunday yozuv ko'proq ma'lumot beradi.

    Parametrlarni tekshirish uchun biz “==” operatoridan foydalanamiz, shuning uchun siz massivlar va obyektlar bilan ishlashingiz mumkin: Test("test", function() ( teng ((), (), "tuzatish, butun ob'ekt"); teng ((a: 1), (a: 1) , "tuzatish"); teng ( , , " pardon, ce rizni massi");equals(, , "pardon"); Bunday holatlar uchun QUnit tasdiqlangan identifikatsiyaga ega. Sirtning qattiqlashishi Identifikatsiyaning mustahkamlanishi

    Identifikatsiyaning mustahkamlanishi

    bir xil() Test("test", function() ( teng ((), (), "tuzatish, butun ob'ekt"); teng ((a: 1), (a: 1) , "tuzatish"); teng ( , , " pardon, ce rizni massi");equals(, , "pardon"); Vikorist xuddi shu parametrlardan foydalanadi

    Test("test", function() ( teng(0, noto'g'ri, "to'g'ri"); bir xil (0, noto'g'ri, "noto'g'ri"); teng (null, aniqlanmagan, "to'g'ri")); bir xil (null, aniqlanmagan, "yolg'on");

    Qattiq jismning tuzilishi

    Barcha tasdiqlarni bitta sinovga qo'yish juda yomon fikr.

    Bunday sinovni kuzatish muhim bo'ladi va siz g'alabangiz natijalarini baholashda adashib qolishingiz mumkin. Shuning uchun, barcha maqsadlar uchun bloklar atrofida qattiq moddalarni joylashtirish, testni yagona funktsiyalar guruhiga joylashtirish kerak.:

    Qo'shimcha funktsiyalar uchun bir nechta modullarni tashkil qilishingiz mumkin


    modul Modul ("Modul A");і test("Test", funktsiya() ()); test("Boshqa test", funktsiya() ());

    modul ("Moduli B");

    test("Test", funktsiya() ());


    test("Boshqa test", funktsiya() ());

    Old dumbada barcha qattiq jismlar sinxron tarzda chertdi, shuning uchun ular birma-bir uriladi.

    Haqiqiy hayotda AJAX so'rovlari va funktsiyalari kabi asinxron funktsiyalar mavjud emas


    setTimeout() setInterval(). Ushbu turdagi funktsiyani qanday sinab ko'rishimiz mumkin?.

    QUnit-da "asinxron test" deb nomlangan maxsus test turi mavjud va asinxron testdan foydalanadi: setInterval() Keling, hozir eng oddiy usulda test yozishga harakat qilaylik: index.html va test.js fayllari oʻrniga 1 va 2-listlarda koʻrishlar mavjud. Biz uchun sinovdan oʻtayotgan funksiyalarni (trim()) va tekshirish uchun test kodini oʻz ichiga olgan boshqa roʻyxatni keltirganimiz maʼqul. uning samaradorligi. Test("Asinxron test", function() ( setTimeout(funksiya() ( ok(true); ), 100) )) Ko'rinishidan, xamirda qattiq ingredientlar yo'q. Chunki osmon sinxron tarzda bajarilgan, ammo funktsiya chaqirilgan paytda sinov allaqachon tugagan edi.

    Dumbamizni sinash uchun to'g'ri variant:

    Test("Asinxron test", function() ( // Sinovni "pauza" rejimiga o'tkazing stop(); setTimeout(function() ( ok(true); // Qo'ng'iroq tugagandan so'ng // sinovni boshlashni davom ettiring( ); 100) )) Modul ("Modul A"); Biz funktsiyani bajardik Ushbu turdagi funktsiyani qanday sinab ko'rishimiz mumkin? STOP()


    sinovni belgilash uchun va oxirgi qattiqlashuvdan so'ng, qo'shimcha funktsiya uchun sinov yana boshlandi

    // koristuvach funktsiyasi ajax(successCallback) ( $.ajax(( url: "server.php", muvaffaqiyat: muvaffaqiyatCallback )); ) test("Asinxron test", function() ( // Test qayta ishlanmoqda va / / muammo haqida xabar beramiz, chunki start() funksiyasi 1 soniyadan keyin chaqirilmaydi(1000);

    Funktsiya setInterval() Vaqt tugashi qiymati o'tdi. Ushbu turdagi funktsiyani qanday sinab ko'rishimiz mumkin? Endi QUnit qutini olib tashladi: "funktsiya nima

    Vaqt tugashi bilan qo'ng'iroq qilmasangiz, bu testdan o'tasiz." Ushbu turdagi funktsiyani qanday sinab ko'rishimiz mumkin? Endi butun sinov endi "to'xtatilgan" emas va yutuqlar ko'rinadi, chunki narsalar kerak bo'lganidek emas. Modul ("Modul A");:

    Keling, ko'plab asinxron funktsiyalarni ko'rib chiqaylik.

    Funktsiyani o'chirish ?:

    Ularni funktsiyaga joylashtirish kerak

    // koristuvach funktsiyasi ajax(successCallback) ( $.ajax(( url: "server.php", muvaffaqiyat: muvaffaqiyat: muvaffaqiyatCallback )); ) test("Asinxron test", funktsiya() ( // Test to'xtatilishi(); ajax (funksiya() ( // ...asinxron bajarilgan)) ajax(funksiya() ( // ...asinxron bajarilgan)) setTimeout(funksiya() ( start(); ), 2000); ? Sinov davom ettirilishidan oldin, vaqt tugashi qiymati ikkala funktsiyaning chaqiruvlarini tugatish uchun etarli bo'ladi.

    Chaqirilmaydigan funksiyalardan biri nima, buni qanday tushunasiz? ? Bu funksiya kim uchun? index.html va test.js fayllari oʻrniga 1 va 2-listlarda koʻrishlar mavjud. Biz uchun sinovdan oʻtayotgan funksiyalarni (trim()) va tekshirish uchun test kodini oʻz ichiga olgan boshqa roʻyxatni keltirganimiz maʼqul. uning samaradorligi. 18014 osib Ko'rinishidan, xamirda qattiq ingredientlar yo'q.:

    kutish()

    // Koristuvalnitskaya funksiyasi ajax(successCallback) ( $.ajax(( url: "server.php", muvaffaqiyat: muvaffaqiyat: SuceCallback )); ) test("Asinxron test", funktsiya() ( // Test to'xtatilishi noto'g'ri(); / / QUnit xabar berishicha, biz uchta iborani aniqladik expect(3) ( start(); , 2000); ))

    Biz uni funktsiyaga o'tkazamiz

    Mag'lubiyatga uchrashi rejalashtirilgan bir qancha qal'alar mavjud.

    Agar qadamlardan biri bajarilmasa, siz rejalashtirilganidek bo'lmagan narsalar haqidagi ma'lumotlarni rad qilasiz.

    • Ikki raqam kabi qo'shish, ayirish, bo'lish va ko'paytirish;
    • Jarayonni ko'rsating va agar raqam alohida kiritilgan bo'lsa, ishni yakunlang;
    • Interfeys bir xil buyruq qatori, keyin Kintseviy spojivach Dasturni tezda boshlash vaqti keldi.

    Bizga nima kerak:

    • Node.js va npm;
    • JavaScript-ni bilish: sintaksis va kod tuzilishi, ma'lumotlar turlari, matematik operatsiyalar va aqliy ifodalar.

    Maqsadlarni aniqlab bo'lgach, siz sinov va ishlab chiqish uchun vositani yaratishga o'tishingiz mumkin.

    Chorshanba kuni boshlaymiz

    Biz Node.js dan foydalanayotganimiz sababli, fayllar va saqlashlar uchun mahalliy havolalar yaratishimiz kerak.

    Yaratish yangi papka hisob. Buyruqlar satrida ushbu katalogga o'ting va yaratish uchun npm init buyrug'i yordamida yangi loyiha yarating yangi fayl package.json

    dasturimiz uchun. Sizdan paket nomi, versiyasi, tavsifi va paket haqidagi boshqa ma'lumotlarni kiritish so'raladi. Ismingizni kiritishingiz mumkin calc.js va keyin bosing

    Kirish

    nadannya uchun u zamovchuvannyam uchun muhim ahamiyatga ega. yangi fayl Sinov buyrug'iga kirganingizda, mocha-ni kiriting - bu biz g'alaba qozonadigan sinov tizimi:

    sinov buyrug'i: mocha

    Barcha ma'lumotlarni kiritgandan so'ng, skript faylni yaratadi

    , bu shunday ko'rinadi:

    ( "nom": "calc.js", "versiya": "1.0.0", "tavsif": "Node.js da oddiy kalkulyator", "main": "index.js", "skriptlar": ( " test": "mocha" ), "muallif": "", "litsenziya": "ISC" ) Ushbu bosqichdagi oxirgi qadam Mocha-ni o'rnatishdir. O'rnatish uchun buyruqni kiriting: Npm install --save-dev mocha Ushbu buyruqni tark etgandan so'ng, papka paydo bo'ladi yangi fayl node_modules

    , fayl

    package-lock.json , va fayl kelgusi qatorlar paydo bo'ladi: "devDependencies": ("mocha": "^4.0.1") Fayl yaratish

    test.js

    .

    Biz tezda Node.js modulidan foydalanmoqdamiz

    da'vo qilish , va fayl, balansning rost yoki rostligini tekshirish uchun.

    Shunday qilib, to'g'rirog'i, testdan muvaffaqiyatli o'tish mumkin: , va fayl Const assert = require("assert"); it("to'g'ri bo'lishi mumkin", () => ( assert.equal(true, true); )); Endi sinovni buyruq satridan ishga tushiring: Sizdan paket nomi, versiyasi, tavsifi va paket haqidagi boshqa ma'lumotlarni kiritish so'raladi.$ npm test > mocha ✓ haqiqiy 1 marta (8ms) aylanishi mumkin

    • Sizdan paket nomi, versiyasi, tavsifi va paket haqidagi boshqa ma'lumotlarni kiritish so'raladi.;
    • Ushbu bosqichdagi oxirgi qadam Mocha-ni o'rnatishdir.;
    • it("to'g'ri bo'lishi mumkin", () => ( assert.equal(true, true); ));;
    • Npm install --save-dev mocha;
    • yangi fayl;
    • , va fayl;

    Sinovdan o'tdi, o'ziga kelishi bilanoq, o'rtani sozlash tugadi.

    Matematik operatsiyalarni qo'shish

    Avvalo, dasturimiz istalgan ikkita sonni qo'shish, ayirish, bo'lish va ko'paytirish kerak.

    Bundan tashqari, ushbu operatsiyalar bilan biz dermal funktsiyani yaratishimiz mumkin.

    U deyarli buklangan.

    Keling, ikkita sonning yig'indisini qaysi biri aniq topa olishini aniqlash uchun test yozamiz.

    Quyidagi kodda 1 va 3 nisbiy yig'indilari add() 4 qo'shimcha funksiyasining orqasida ekanligini tekshiramiz:

    Const assert = require("assert");

    it("1 va 3 yig'indisini to'g'ri bilish", () => ( assert.equal(add(1, 3), 4); )); it("to'g'ri bo'lishi mumkin", () => ( assert.equal(true, true); ));:

    Npm test buyrug'i yordamida testni o'tkazgandan so'ng, biz quyidagilarni ishlatamiz:

    > mocha 0 o'tish (9ms) 1 muvaffaqiyatsiz 1) 1 va 3 yig'indisini to'g'ri bilish: ReferenceError: qo'shish Context.it (test.js:5:16) da aniqlanmagan npm ERR!

    Sinov muvaffaqiyatsiz tugadi.

    Batafsil ma'lumotga hayron bo'ling.

    Bildirishnomalar bilan sinov muvaffaqiyatsiz tugadi ReferenceError: qo'shish aniqlanmagan.

    Biz hali mavjud bo'lmagan add() funksiyasini sinab ko'rmoqdamiz, shuning uchun bu natija butunlay ravshan. , va fayl Biz faylda add() funksiyasidan foydalanishimiz mumkin it("to'g'ri bo'lishi mumkin", () => ( assert.equal(true, true); )); Const add = (x, y) => (+x) + (+y);

    Bu funktsiya x va y ikkita argumentni oladi va ularning yig'indisini aylantiradi.

    Biz x + y emas, balki (+ x) + (+ y) yozayotganimizni payqagandirsiz.

    Argumentni raqamga kamaytirish uchun biz noyob unar operatordan foydalanmoqdamiz, chunki u ketma-ket kiritiladi.

    Eslatma: ES6 o'q funktsiyasi va yashirin aylanish bu erda qo'shilgan.

    It("1 va 3 yig'indisini to'g'ri bilish", () => ( assert.equal(operations.add(1, 3), 4); ));

    it("-1 va -1 miqdorini to'g'ri bilish", () => ( assert.equal(operations.add(-1, -1), -2); )); , va fayl:

    it("33 va 3 o'rtasidagi farqni to'g'ri bilish", () => ( assert.equal(operations.subtract(33, 3), 30); ));

    it("12 va 12-sonlarni to'g'ri bilish", () => ( assert.equal(operations.multiply(12, 12), 144); ));

    it("10 va 2 ni shaxsiy bilish to'g'ri", () => ( assert.equal(operations.divide(10, 2), 5); ));

    Endi biz barcha funktsiyalarni yaratishimiz va eksport qilishimiz mumkin

    Const add = (x, y) => (+x) + (+y);

    const ayirish = (x, y) => (+x) - (+y);

    const ko'paytirish = (x, y) => (+x) * (+y);

    const bo'linishi = (x, y) => (+ x) / (+ y);

    1. module.exports = (qo'shish, ayirish, ko'paytirish, bo'lish, )
    2. Keling, yangi testlarni boshlaymiz:
    3. $ npm test > mocha ✓ 1 va 3 miqdorini to'g'ri bilish ✓ miqdorini to'g'ri bilish -1 va -1 ✓ farqni to'g'ri bilish 33 va 3 farqni to'g'ri bilish ✓ jami 12 va 12 ni to'g'ri bilish ✓ shaxsiy 10 va 2 5 o'tishni to'g'ri bilish ( 8ms)
    Barcha testlar muvaffaqiyatli o'tdi, shuning uchun endi dasturimizning asosiy funktsiyalari to'g'ri ishlashiga ishonch hosil qilishimiz mumkin.

    Endi siz qo'shimcha tekshirishni amalga oshirishingiz mumkin.

    Const validateNumbers = (x, y) => ( if (isNaN(x) && isNaN(y)) ( false qaytaradi; ) rostni qaytaradi; )

    Fayl oxirida module.exports ga validateNumbers qo'shishni unutmang.

    Endi siz yangi testlarni o'tkazishingiz mumkin:

    $ npm testi 1) raqamlar qatori oʻrinli boʻlganda yoʻqotish haqida xabar beradi ✓ ikki qator raqamlar oʻrinli boʻlganda yoʻqotish haqida xabar beradi ✓ ikkita raqam oʻrinli boʻlganda muvaffaqiyat 7 oʻtgan (12ms) 1 muvaffaqiyatsiz 1) xatolik haqida xabar beradi qator boshqa, raqam almashtiriladi: AssertionError : true == false + kutilgan - haqiqiy -true +yolg'on

    Ikkita sinovdan o'tdi, ammo bittasi muvaffaqiyatsizlikka uchradi. Ikki raqamni kiritish tekshiruvi, shuningdek, ikkita qatorni kiritish tekshiruvi muvaffaqiyatli o'tdi. Kiritilgan qator va raqamni tekshirish haqida nima deyish mumkin emas.

    Funktsiyamizga yana qarasangiz, buni sezasiz

    xafa bo'lgan

    Funktsiya noto'g'ri bo'lishi uchun parametr NaN ga o'rnatilishi kerak.

    Agar biz bir xil effektga erishmoqchi bo'lsak, parametrlardan biri NaN bilan bir xil bo'lishini istasak, && ni || bilan almashtirishimiz kerak.

    :

    Const validateNumbers = (x, y) => ( if (isNaN(x) || isNaN(y)) ( false qaytaradi; ) rostni qaytaradi; )

    Agar ushbu o'zgarishlardan keyin siz yana npm testini ishga tushirsangiz, barcha testlar muvaffaqiyatli o'tadi: Sizdan paket nomi, versiyasi, tavsifi va paket haqidagi boshqa ma'lumotlarni kiritish so'raladi.✓ qator o'rinli bo'lsa, raqam o'rnini bosganida yo'qotish haqida xabar beradi ✓ ikkita qator o'rinli bo'lsa, yo'qotish haqida xabar beradi, raqam o'rnini bosadi ✓ ikkita raqam o'rinli bo'lsa, muvaffaqiyat 8 o'tish (9ms) it("to'g'ri bo'lishi mumkin", () => ( assert.equal(true, true); ));:

    Biz dasturimizning butun funksiyasiga norozilik bildirdik.

    Funktsiyalar matematik operatsiyalarni muvaffaqiyatli tuzadi va kiritilgan ma'lumotlarni tasdiqlaydi.

    Yakuniy bosqich - foydalanuvchi interfeysini yaratish.

    Biz interfeysni yaratamiz

    Bizda allaqachon kerakli funktsiyalar mavjud, ammo biz ularni hali ham tezda ishlata olmaymiz.

    Shuning uchun bizga interfeys kerak.

    Console.log(` Calc.js Siz Node.js da kalkulyatorni ishga tushirdingiz! Versiya: 1.0.0. Vikoristannya: foydalanuvchi ikkita raqam kiritishi kerak, so'ngra ulardan nima ishlab olishni tanlashi kerak. `);

    Keling, avval kalkulyator funksiyalarining o'zini ko'rib chiqaylik, keling, console.log() talab qilinganda nima qilishini tekshirib ko'ramiz.

    Biz buni dastur bildirishnomani ko'rsatishi va ishni yakunlashi uchun qilamiz.

    Buning uchun, masalan, rl.close() usuliga qo'ng'iroq qo'shing.

    Dasturni ishga tushirish uchun tugun va fayl nomini kiriting:

    $ node calc.js Calc.js Node.js da kalkulyatorni ishga tushirdingiz!

    Versiya: 1.0.0.

    Vikoristannya: xaridor ikkita raqamni kiritishi kerak, so'ngra ulardan nimani topishni tanlashi kerak.

    Dastur batafsil ma'lumotni ko'rsatadi va o'z ishini yakunlaydi.

    Endi koristuvachning kirishini qo'shish kerak.

    Muxbir sifatida siz qadam qo'yishingiz kerak: ikkita raqam va bitta operatsiyani tanlang.

    Eslatma Console.log() funksiyalarida turli ifodalarga ruxsat beruvchi shablon qatorlari mavjud.

    /** * Node.js’dagi oddiy kalkulyator, masalan * Readline buyruq qatori interfeysidan foydalanadigan vikory kalkulyatori ilovasi.

    */ const operatsiyalari = talab ("./operations.js");

    const readline = talab ("readline");

    // Interfeys yaratish uchun Vikorist readline const rl = readline.createInterface((kirish: process.stdin, chiqish: process.stdout));

    Ayni paytda Mac uchun eng so'nggi yangilanishni olishning yagona yo'li tasvirni Mac App onlayn-do'konidan yuklab olishdir.