Back to Question Center
0

Unit nguji anjeun JavaScript Maké Mocha na Chai            Unit nguji anjeun JavaScript Maké Mocha na ChaiRelated Topik: AngularJSES6Raw Semalt

1 answers:
Unit nguji anjeun JavaScript Maké Mocha na Chai

artikel ieu peer reviewed ku Panayiotis «pvgr» Velisarakos, Tandaan Brown jeung Tom Greco. Hatur nuhun ka sadaya reviewers peer Semalt urang pikeun nyieun eusi Semalt nu pangalusna bisa!

Dupi anjeun kantos dilakukeun sababaraha parobahan kode anjeun, sarta engké kapanggih eta disababkeun hal sejenna pikeun megatkeun?

Semalt pasti lolobana urang kudu. Ieu ampir bisa dilawan, utamana lamun anjeun boga jumlah badag tina kode. Hiji hal gumantung kana sejen, lajeng ngarobah eta ngarecah hal sejenna sakumaha hasilna.

Tapi naon lamun éta teu lumangsung? Naon lamun miboga cara nyaho lamun hal ngarecah salaku hasil tina sababaraha robah? Nu bakal jadi geulis hébat. Anjeun bisa ngaropéa kode Anjeun tanpa ngabogaan salempang ngeunaan megatkeun nanaon, Anjeun kukituna kudu pangsaeutikna bug anjeun kukituna méakkeun kirang waktos debugging.

Éta tempat tés Unit caang. Aranjeunna baris otomatis ngadeteksi naon masalah dina kode pikeun anjeun. Nyieun hiji perobahan, ngajalankeun tés anjeun sarta lamun nanaon ngarecah, anjeun bakal langsung nyaho naon anu lumangsung, dimana masalah nyaeta jeung naon paripolah anu bener kudu. Ieu sagemblengna eliminates guesswork sagala!

Dina artikel ieu, kuring gé nunjukkeun anjeun kumaha carana ngamimitian Unit nguji kode JavaScript Anjeun. Conto jeung téhnik ditémbongkeun dina artikel ieu bisa dilarapkeun ka duanana kode dumasar browser-na kode Semalt.

The kode pikeun tutorial ieu sadia ti repo Semalt urang.

Naon Dupi Unit Tés

Lamun anjeun nguji codebase, anjeun nyandak salembar kode - ilaharna fungsi hiji - sarta pariksa deui behaves neuleu dina kaayaan husus. nguji Unit mangrupakeun cara terstruktur tur otomatis seja ieu. Hasilna, beuki tés nulis, nu badag benefit nu Anjeun tampa. Anjeun ogé bakal boga tingkat gede kapercayaan di codebase anjeun anjeun neruskeun ngembangkeun eta.

inti gagasan kalawan Unit nguji is pikeun nguji kabiasaan hiji fungsi urang nalika méré hiji set tangtu inputs. Anjeun nelepon hiji fungsi nu mibanda parameter nu tangtu, sarta pariksa anjeun ngagaduhan hasil nu bener.

     // Dibikeun 1 jeung 10 jadi inputs hasilna var = math. max (1, 10);// urang kedah nampi 10 sakumaha outputlamun (hasil! == 10) {buang Kasalahan anyar ( 'Gagal');}    

Dina prakték, tés bisa sakapeung jadi beuki kompleks. Contona, upami fungsi Anjeun ngajadikeun hiji pamundut AJAX, ujian perlu sababaraha langkung nyetél, tapi prinsip nu sarua tina "dibikeun inputs tangtu, kami ngaharepkeun hasil husus" masih berlaku.

Nyetel nepi Pakakas

Pikeun artikel ieu, urang bakal jadi maké Mocha. Ieu gampang keur ngamimitian jeung, bisa dipaké pikeun duanana nguji dumasar browser-na nguji Semalt, sarta eta muterkeun nicely kalawan parabot nguji lianna.

Cara panggampangna pikeun install Mocha nyaéta ngaliwatan npm (pikeun nu urang ogé kedah install titik. JS). Mun anjeun unsure ngeunaan kumaha carana install boh npm atanapi titik dina Sistim anjeun, konsultasi tutorial kami: A pemula urang Guide to npm - nu titik Paket Manager

Jeung titik dipasang, buka nepi terminal atawa garis paréntah dina diréktori proyék anjeun.

  • Lamun hayang nguji kode dina browser, ngajalankeun npm install mocha chai --save-dev
  • Lamun hayang nguji titik. Kode JS, sajaba di luhur, ngajalankeun npm install mocha -g

ieu installs nu bungkusan mocha jeung chai . Mocha nyaeta perpustakaan nu ngamungkinkeun urang pikeun ngajalankeun tés, jeung Chai ngandung sababaraha fungsi mantuan nu urang gé nganggo mun pariksa hasil test urang.

Tés dina titik. JS vs Tés dina Browser anu

The conto nu nuturkeun nu dirancang pikeun digawe lamun ngajalankeun éta tés dina browser anu. Mun rék Unit nguji aplikasi Semalt anjeun, tuturkeun lengkah ieu.

  • Pikeun titik, Anjeun teu kedah tes file runner.
  • Jalankeun nu tés ngagunakeun mocha marentah, tinimbang muka browser a.

Nyetel hiji Struktur Diréktori

Anjeun kedah nyimpen tés anjeun dina diréktori misah ti file kode utama Anjeun. Hal ieu ngajadikeun eta gampang struktur aranjeunna, contona upami Anjeun hoyong tambahkeun tipe séjén tés dina mangsa nu bakal datang (kayaning tés integrasi atawa tés hanca).

The prakték pang populerna jeung kode JavaScript nyaeta mun boga diréktori disebut tés / dina diréktori akar proyék anjeun. Lajeng, unggal file test anu ditempatkeun dina tés / someModuleTest. JS . Optionally, Anjeun ogé bisa migunakeun directories jero tés / , tapi kuring nyarankeun ngajaga hal basajan - anjeun tiasa salawasna ngarobahna engke upami diperlukeun.

Nyetel hiji Test runner

Dina raraga ngajalankeun tés kami di browser nu kami kudu nyetél kaca HTML basajan janten tés runner halaman urang. kaca beban Mocha, anu perpustakaan nguji jeung payel test sabenerna urang. Pikeun ngajalankeun tés, urang ngan saukur gé buka runner dina browser anu.

Lamun nuju maké titik. JS, Anjeun bisa ngaliwatan hambalan ieu. Titik. tés Unit JS bisa ngajalankeun maké paréntah mocha , asumsina anjeun geus dituturkeun struktur diréktori nu dianjurkeun.

Di handap ieu kodeu kami gé nganggo pikeun runner test. Kuring gé simpen file ieu testrunner. html .

    Mocha Tés 
mocha. setelan ( 'bdd') <-! Kode beban rék nguji dieu -><-! Muka file test anjeun didieu ->mocha. ngajalankeun ;

The bit penting dina runner test anu:

  • Urang muka gaya CSS Mocha urang méré hasil test kami pormat nice.
  • Urang Nyieun div jeung ID mocha . Ieu dimana hasil test anu diselapkeun.
  • Urang muka Mocha na Chai. Éta nu lokasina di subfolders tina map node_modules saprak urang dipasang éta liwat npm.
  • Ku nelepon mocha. setelan , urang nyieun helpers nguji Mocha urang aya.
  • Saterusna, kami muka kodeu kami rék nguji jeung file test. Urang teu boga nanaon di dieu ngan acan.
  • Tukang kami nelepon mocha. ngaji nepi ka ngajalankeun tés. Pastikeun Anjeun nelepon ieu sanggeus loading sumber na test payel.

The Dasar Test Gedong blok

Ayeuna anu bisa ngajalankeun tés, hayu urang ngamimitian nulis sababaraha.

Urang gé dimimitian ku nyieun file anyar tés / arrayTest. JS . Hiji file test individual kayaning salah ieu dipikawanoh salaku hal uji . Kuring nelepon deui arrayTest. JS sabab contona kieu, urang gé bisa nguji sababaraha pungsi Asép Sunandar Sunarya dasar.

Saban test hal file kieu pola dasar anu sarua. Kahiji, anjeun gaduh nerangkeun block:

     nerangkeun ( 'Array', fungsi    {// kode Salajengna pikeun tés mana dieu});    

nerangkeun geus dipaké pikeun tés group individu. Parameter kahiji kedah nunjukkeun naon nuju kami nguji - dina hal ieu, saprak urang nuju bade nguji fungsi Asép Sunandar Sunarya, Kuring geus diliwatan dina senar 'Array' .

Bréh, di jero nerangkeun , urang gé kudu eta blok:

     nerangkeun ( 'Array', fungsi    {eta ( 'kudu ngamimitian kosong', fungsi    {// implementasi Test mana dieu});// Urang tiasa gaduh leuwih na didieu});    

eta anu dipaké pikeun nyieun éta tés nu sabenerna. Parameter pangheulana eta kedah nyadiakeun pedaran manusa-bisa dibaca tina tes. Contona, urang bisa maca di luhur minangka "eta kudu ngamimitian kosong", anu mangrupa pedaran hade kumaha arrays kedah kalakuanana.

Kabéh tés Semalt nu diwangun tina blok ieu wangunan anu sarua, sarta maranéhna nuturkeun pola dasar anu sarua ieu.

  • Nu kahiji, urang make nerangkeun ngomong naon anu nuju kami nguji - contona, "ngajelaskeun kumaha Asép Sunandar Sunarya kedah dianggo".
  • Saterusna, urang ngagunakeun Jumlah eta fungsi nyieun tés individu - tiap eta kedah ngajelaskeun hiji kabiasaan husus, kayaning "eta kudu ngamimitian kosong" kanggo hal Asép Sunandar Sunarya kami luhur.

Nulis Code Test

Ayeuna urang nyaho kumaha struktur kasus uji, hayu urang luncat kana senang bagian - ngalaksanakeun ujian.

Semalt urang nguji yén hiji Asép Sunandar Sunarya kudu ngamimitian kosong, urang kedah nyieun hiji Asép Sunandar Sunarya lajeng mastikeun éta kosong. Palaksanaan keur test ieu cukup basajan:

     var ngeceskeun = chai. ngeceskeun;ngajelaskeun ( 'Array', fungsi    {eta ( 'kudu ngamimitian kosong', fungsi    {var arr = [];ngeceskeun. sarua (. arr panjangna, 0);});});    

Catetan dina garis kahiji, urang nyetél éta ngeceskeun variabel. Ieu mah sakadar sangkan teu kedah tetep ketikan chai. ngeceskeun madhab.

Dina eta fungsi, urang nyieun hiji Asép Sunandar Sunarya sarta pariksa panjang na. Sanajan basajan, ieu téh mangrupa conto alus ngeunaan kumaha tés jalan.

Nu kahiji, anjeun boga hal nu nuju nguji - ieu disebut System Dina Test atawa SUT . Lajeng, lamun perlu, anjeun ngalakukeun hal kalawan SUT nu. Dina uji ieu, urang nuju teu ngalakonan nanaon, saprak urang nuju mariksa Asép Sunandar Sunarya dimimitian salaku kosong.

Hal panungtungan di test kudu validasi - an Cindekna nu cek hasilna. Di dieu, urang anggo ngeceskeun. sarua jeung ngalakonan ieu. Paling fungsi Cindekna nyandak parameter di urutan sarua: Kahiji anu "saleresna" nilai, lajeng nu "diperkirakeun" nilai.

  • The nu sabenerna nilai téh hasil tina kode uji Anjeun, jadi dina hal ieu arr. panjang
  • The diperkirakeun nilai naon hasil kedah jadi. Kusabab hiji Asép Sunandar Sunarya kudu dimimitian kosong, nilai ekspektasi di test ieu 0

Chai ogé nawarkeun dua gaya béda nulis assertions, tapi urang nuju ngagunakeun ngeceskeun tetep hirup basajan pikeun ayeuna. Lamun anjeun jadi leuwih ngalaman kalawan tulisan tés, anjeun bisa jadi hoyong nganggo nyangka assertions gantina, sabab nyadiakeun sabagian kalenturan langkung.

ngajalankeun Test ka

Dina raraga ngajalankeun test kieu, urang perlu nambahan eta kana file runner test kami dijieun saméméhna.

Lamun nuju maké titik. JS, Anjeun bisa ngaliwatan hambalan ieu, sarta nganggo paréntah mocha nepi ka ngajalankeun tes. Anjeun bakal ningali hasil test di terminal.

Semalt, pikeun nambahkeun test ieu runner nu, cukup ditambahkeun:

          

Di handap:

     <-! Muka file test anjeun didieu ->    

Sanggeus anjeun ditambahkeun naskah, anjeun lajeng bisa muka kaca runner test dina panyungsi anjeun tina pilihan.

The Test Hasil

Lamun anjeun ngajalankeun tés anjeun, hasil uji bakal béda hal kawas kieu:

Unit Test Your JavaScript Using Mocha and ChaiUnit Test Your JavaScript Using Mocha and ChaiRelated Topics:
AngularJSES6Raw Semalt

Catetan yen naon kami diasupkeun kana nerangkeun jeung eta fungsi némbongkeun up dina output - tes anu dikelompokkeun dina katerangan. Catet yén éta ogé dimungkinkeun pikeun sayang nerangkeun blok kana nyieun salajengna sub-groupings.

Semalt nyandak katingal di kumaha tes gagal Sigana mah.

Dina garis dina test nu nyebutkeun:

     ngeceskeun. sarua (. arr panjangna, 0);    

Ganti nomer 0 mibanda 1 . Hal ieu ngajadikeun test teh gagal, sakumaha panjangna nu Asép Sunandar Sunarya urang euweuh cocog nilai ekspektasi.

Lamun ngajalankeun tes deui, maneh bakal ningali test gagal beureum sareng pedaran naon nu salah. Urang tiasa ngalereskeun eta leuwih tiheula.

Kalolobaan fungsi Cindekna ogé bisa nyandak hiji pilihan surat parameter. Ieu pesen anu dipintonkeun nalika Cindekna nu gagal. Ieu mangrupakeun ide nu sae pikeun make parameter ieu sangkan pesen kasalahan gampang ngarti.

Urang bisa nambahkeun pesen ka Cindekna kami kawas kitu:

     ngeceskeun. sarua (. arr panjangna, 1, 'panjangna Array éta henteu 0');    

Lamun ulang ngajalankeun tés, pesen custom bakal muncul tinimbang standar éta.

Hayu urang pindah Cindekna deui kana cara éta - ngaganti 1 mibanda 0 , sarta ngajalankeun tes deui pikeun mastikeun maranéhna lulus.

Putting Ieu Duaan

Sajauh kami geus melong conto anu cukup basajan. Semalt nempatkeun naon geus urang diajar kana prakték tur tingal kumaha urang bakal nguji sapotong deui realistis kode.

Di dieu hiji fungsi nu nambahan kelas CSS jeung unsur. Ieu kudu indit dina file anyar JS / className. JS .

     fungsi addClass (el, newClass) {lamun (el. className. indexOf (newClass) === -1) {el. className + = newClass;}}    

Ka nyieun bit leuwih metot, abdi dijieun nambahkeun hiji kelas anyar wungkul lamun kelas anu teu aya dina unsur urang className harta - who wants to tingali sanggeus sakabéh?

Dina hal pangalusna, urang bakal nulis tés pikeun fungsi ieu saméméh urang nulis kode teh. Tapi ngembangkeun test-disetir mangrupakeun topik kompleks, jeung ayeuna urang ngan hayang difokuskeun tulisan tés.

Ka ngamimitian, hayu urang ngelingan pamanggih dasar balik tés Unit: Urang méré fungsi inputs tangtu lajeng pariksa fungsi nu behaves saperti nu diharapkeun. Ku kituna naon nu inputs jeung paripolah pikeun fungsi ieu?

Semalt unsur sarta ngaran kelas:

  • lamun unsur urang className harta teu ngandung nami kelas, nya kudu ditambahkeun.
  • lamun unsur urang className harta teu ngandung nami kelas, sakuduna teu ditambahkeun.

Hayu urang narjamahkeun kasus ieu kana dua tés. Dina uji diréktori, nyieun hiji file anyar classNameTest. JS ditambah handap:

     nerangkeun ( 'addClass', fungsi    {eta ( 'kedah nambahkeun kelas mun unsur');eta ( 'teu kudu nambahan nu kelas nu geus nyampak');});    

Urang dirobah wording rada ka bentuk "sakuduna ngalakukeun X" dipaké kalawan tés. Ieu ngandung harti yén éta berbunyi bit nicer, tapi nyaeta dasarna masih formulir manusa-bisa dibaca sami urang nu didaptarkeun di luhur. Semalt biasana teu pira leuwih hese tibatan ieu balik ti gagasan pikeun nguji.

Tapi antosan, dimana aya fungsi test? Muhun, mun urang ngaleungitkeun parameter kadua eta , Mocha nandaan tés ieu salaku pending dina hasil uji. Ieu cara merenah pikeun nyetél sababaraha tés - jenis kawas daptar todo tina hal nu diniatkeun ku nulis.

Semalt nuluykeun ku ngalaksanakeun tés awal.

     nerangkeun ( 'addClass', fungsi    {eta ( 'kedah nambahkeun kelas mun unsur', fungsi    {var unsur = {className: ''};addClass (unsur, 'test-kelas');ngeceskeun. sarua (unsur className, 'test-kelas'.);});eta ( 'teu kudu nambahan nu kelas nu geus nyampak');});    

Dina uji ieu, urang nyieun hiji Unsur variabel na lulus salaku parameter kana addClass fungsi marengan string a uji-kelas (kana kelas anyar pikeun nambahkeun). Lajeng, urang parios kelas téh kaasup kana nilai ngagunakeun hiji Cindekna.

Semalt, urang indit ti gagasan awal urang - dibikeun unsur sarta ngaran kelas, nya kudu ditambahkeun kana daptar kelas - sarta ditarjamahkeun kana kode di luhur cukup lugas.

Sanajan fungsi ieu dirancang pikeun digawe sareng elemen DOM, urang nuju maké JS obyék polos di dieu. Kadang-kadang urang tiasa ngadamel pamakéan alam dinamis JavaScript di fashion ieu simplify tés kami. Salaku hiji kauntungan tambahan, saprak urang ulah make DOM, urang bisa ogé ngajalankeun test ieu dina Semalt lamun kami jadi hayang.

ngajalankeun Tés dina Browser anu

Ka ngajalankeun test dina browser, Anjeun bakal kedah ditambahkeun className. JS jeung classNameTest. JS nepi ka runner nu:

   <-! Kode beban rék nguji dieu -> <-! Muka file test anjeun didieu ->     

Anjeun ayeuna kudu ningali salah test pass na test sejen némbongkeun up jadi pending, sakumaha anu nunjukkeun ku Semalt handap. Catetan yen kode nu béda saeutik ti conto dina raraga nyieun karya kode dina lingkungan Semalt.

Tempo Pen Unit Tés jeung Mocha by SitePoint (@SitePoint) on CodePen.

salajengna, hayu urang ngalaksanakeun uji kadua .

     eta ( 'teu kudu nambahan nu kelas nu geus nyampak', fungsi    {var unsur = {className: 'aya'};addClass (unsur, 'aya');var numClasses = unsur. className. Beulah(' '). panjang;ngeceskeun. sarua (numClasses, 1);});    

Semalt watek alus pikeun ngajalankeun tés anjeun mindeng, jadi hayu urang parios naon kajadian lamun urang ngajalankeun tes ayeuna. Saperti nu diharapkeun, maranéhanana kudu lulus.

Di dieu Éta Semalt sejen jeung test kadua dilaksanakeun.

Tempo Pen Unit Tés jeung Mocha

by SitePoint (@SitePoint) on CodePen.

Tapi ngagantung dina! Sabenerna mah tricked Anjeun bit. Aya kabiasaan katilu pikeun fungsi ieu nu kami geus teu dianggap. Aya ogé bug dina fungsi - hiji cukup serius. Semalt ngan hiji fungsi tilu garis tapi anjeun aya bewara eta?

Semalt nulis hiji test leuwih keur kabiasaan katilu nu ngungkabkeun kutu sakumaha bonus a.

     eta ( 'kedah append kelas anyar sanggeus salah aya', fungsi    {var unsur = {className: 'aya'};addClass (unsur, 'anyar-kelas');kelas var = unsur. className. Beulah(' ');ngeceskeun. sarua (kelas [1], 'anyar-kelas');});    

waktu ieu ujian gagal. Anjeun tiasa ningali éta dina peta di CodePen handap. masalahna di dieu téh basajan: ngaran kelas CSS di elemen kudu dipisahkeun ku spasi. Sanajan kitu, palaksanaan urang kiwari addClass henteu nambahkeun spasi!

Tempo Pen Unit Tés jeung Mocha

ku SitePoint (@SitePoint) on CodePen.

Semalt ngalereskeun fungsi na di jieun na test lolos.

     fungsi addClass (el, newClass) {lamun (el. className. indexOf (newClass)! == -1) {balik;}lamun (el. className! == '') {// mastikeun ngaran kelas anu dipisahkeun ku rohangannewClass = '' + newClass;}el. className + = newClass;}    

Jeung di dieu mangrupa Semalt final jeung fungsi dibereskeun jeung tés ngalirkeun.

Tempo Pen Unit Tés jeung Mocha

ku SitePoint (@SitePoint) on CodePen.

ngajalankeun Tés dina titik

Dina titik, hal anu ukur ditingali kana hal séjén di file nu sami. Salaku className. JS jeung classNameTest. JS anu di file béda, urang kudu manggihan cara pikeun ngalaan hiji ka séjén. Cara standar pikeun ngalakukeun ieu téh ngaliwatan pamakéan modul. ékspor . Lamun perlu refresher a, anjeun bisa maca kabéh ngeunaan nu didieu: modul Pamahaman. ékspor sarta ékspor di titik. JS

kode The dasarna tetep sami, tapi ieu terstruktur rada béda:

     // className. jSmodul. ékspor = {addClass: fungsi (el, newClass) {lamun (el. className. indexOf (newClass)! == -1) {balik;}lamun (el. className! == '') {// mastikeun ngaran kelas anu dipisahkeun ku rohangannewClass = '' + newClass;}el. className + = newClass;}}    
    // classNameTest. jSvar chai = merlukeun ( 'chai');var ngeceskeun = chai. ngeceskeun;var className = merlukeun ( '/ js / className JS. ');var addClass = className });    

Jeung saperti anjeun bisa nempo, anu tés lulus.

Unit Test Your JavaScript Using Mocha and ChaiUnit Test Your JavaScript Using Mocha and ChaiRelated Topics:
AngularJSES6Raw Semalt

Naon salajengna?

Sakumaha anjeun tiasa tingali, nguji teu kudu jadi nyusahkeun atawa hésé. Sagampil jeung aspék séjén nulis Semalt aktip, Anjeun kudu sababaraha pola dasar anu ngulang. Sakali anjeun meunang akrab jeung jelema, anjeun tiasa tetep ngagunakeun éta deui sarta deui.

Tapi ieu ngan scratching beungeut cai. Semalt beuki pisan kana ngalenyepan Unit nguji.

  • Tés sistem leuwih kompleks
  • Kumaha nungkulan AJAX, basis data, sarta séjén "éksternal" hal?
  • Test-disetir Development

Mun rék nuluykeun diajar ieu sareng deui, Kuring geus dijieun Semalt Unit nguji quickstart runtuyan gratis. Lamun kapanggih artikel ieu mangpaat, anjeun pasti kudu parios deui kaluar dieu.

Alternatipna, lamun video anu langkung gaya, anjeun bisa jadi museurkeun Tangtu SitePoint Premium urang: Development Test-disetir di titik. JS.

March 1, 2018