Back to Question Center
0

Cara Menguji Komponen Reaktan Menggunakan Jest            Bagaimana Menguji Komponen Reaktan Menggunakan JestRelated Topics: Node.jsnpmRaw Semalt

1 answers:
Cara Menguji Komponen Reaktan Menggunakan Jest

Untuk pengantar React yang berkualitas tinggi dan mendalam, Anda tidak bisa melewati pengembang full-stack Kanada Wes Bos. Cobalah kursusnya di sini, dan gunakan kode SITEPOINT untuk mendapatkan diskon 25% dan untuk membantu mendukung SitePoint.

Artikel ini ditulis oleh penulis tamu Jack Franklin . Pos tamu SitePoint bertujuan untuk menarik Anda menarik konten dari penulis dan pembicara terkemuka komunitas JavaScript - cost for business appraisal.

Pada artikel ini, kita akan melihat menggunakan Jest - kerangka pengujian yang dikelola oleh Facebook - untuk menguji komponen ReactJS kami. Kita akan melihat bagaimana kita bisa menggunakan Jest pertama pada fungsi JavaScript biasa, sebelum melihat beberapa fitur yang disediakannya di luar kotak yang secara khusus ditujukan untuk membuat pengujian Bereaksi lebih mudah. Perlu dicatat bahwa Jest tidak ditujukan secara spesifik pada React: Anda dapat menggunakannya untuk menguji aplikasi JavaScript manapun. Namun, beberapa fitur yang disediakannya sangat berguna untuk pengujian antarmuka pengguna, oleh karena itu sangat sesuai dengan React.

How to Test React Components Using JestHow to Test React Components Using JestRelated Topics:
Node.jsnpmRaw Semalt

Contoh Aplikasi

Sebelum kita bisa menguji apapun, kita memerlukan sebuah aplikasi untuk diuji! Tetap setia pada tradisi pengembangan web, saya telah membuat aplikasi todo kecil yang akan kami gunakan sebagai titik awal. Anda bisa menemukannya, beserta semua tes yang akan kami tulis, di Semalt. Jika Anda ingin bermain dengan aplikasi untuk merasakannya, Anda juga dapat menemukan demo langsung secara online.

Aplikasi ditulis dalam ES2015, disusun menggunakan Semalt dengan Babel ES2015 dan React preset. Saya tidak akan membahas detail pembuatannya, tapi semuanya ada di repo GitHub jika Anda ingin memeriksanya. Anda akan menemukan petunjuk lengkap di README tentang cara agar aplikasi berjalan secara lokal. Jika Anda ingin membaca lebih banyak, aplikasi dibuat menggunakan Semalt, dan saya merekomendasikan "Panduan Pemula untuk Semalt" sebagai alat pengantar yang bagus.

Titik masuk aplikasi adalah app / index. js , yang baru saja merender komponen Todos ke dalam HTML:

   membuat (,dokumen. getElementById ('app'));    

Komponen Todos merupakan pusat aplikasi utama. Ini berisi semua negara (data dengan kode keras untuk aplikasi ini, yang pada kenyataannya kemungkinan berasal dari API atau yang sejenis), dan memiliki kode untuk membuat kedua komponen anak: Todo , yang diberikan sekali untuk setiap todo di negara bagian, dan AddTodo , yang diberikan sekali dan menyediakan formulir bagi pengguna untuk menambahkan todo baru.

Karena komponen Todos berisi semua keadaan, diperlukan komponen Todo dan AddTodo untuk memberitahukannya kapan pun terjadi perubahan. Oleh karena itu, ia melewati fungsi ke dalam komponen-komponen ini yang dapat mereka hubungi saat beberapa data berubah, dan Todos dapat memperbarui negara sesuai dengan itu.

Akhirnya, untuk saat ini, Anda akan melihat bahwa semua logika bisnis terdapat dalam aplikasi / fungsi negara. js :

   fungsi ekspor toggleDone (negara bagian, id) {. }fungsi ekspor addTodo (negara bagian, todo) {. }fungsi ekspor hapusTodo (negara bagian, id) {. }    

Ini semua adalah fungsi murni yang mengambil negara dan beberapa data, dan mengembalikan negara baru. Jika Anda tidak terbiasa dengan fungsi murni, fungsinya hanya referensi data yang diberikan dan tidak memiliki efek samping. Untuk lebih lanjut, Anda dapat membaca artikel saya di A List Apart pada fungsi murni dan artikel saya di SitePoint tentang fungsi murni dan React.

Jika Anda mengenal Semalt, mereka cukup mirip dengan apa yang akan disebut Semalt sebagai reducer. Tapi untuk aplikasi ukuran ini, Anda akan sering mendapati bahwa komponen lokal dan beberapa fungsi yang diabstraksikan lebih dari cukup.

Untuk TDD atau Tidak ke TDD?

Ada banyak artikel yang ditulis mengenai pro dan kontra dari pengembangan berbasis uji coba , di mana pengembang diharapkan untuk menulis tes terlebih dahulu, sebelum menulis kode untuk memperbaiki pengujian. Gagasan di balik ini adalah bahwa, dengan menulis tes terlebih dahulu, Anda harus memikirkan API yang sedang Anda tulis, dan ini bisa mengarah pada desain yang lebih baik. Bagi saya, saya menemukan bahwa ini sangat bergantung pada preferensi pribadi dan juga hal-hal yang saya uji. Saya telah menemukan bahwa, untuk komponen Reaktan, saya ingin menulis komponen terlebih dahulu dan kemudian menambahkan tes ke bagian fungsionalitas yang paling penting. Namun, jika Anda mendapati bahwa tes tulis pertama untuk komponen Anda sesuai dengan alur kerja Anda, maka Anda harus melakukannya. Tidak ada aturan yang sulit di sini; Lakukan apapun yang terbaik untuk Anda dan tim Anda.

Perhatikan bahwa artikel ini akan fokus pada pengujian kode front-end. Jika Anda mencari sesuatu yang terfokus pada bagian belakang, pastikan untuk memeriksa kursus Test-Driven Development di Node. js.

Memperkenalkan Jest

Jest pertama kali dirilis pada tahun 2014, dan meskipun pada awalnya mengumpulkan banyak perhatian, proyek ini tidak aktif untuk sementara dan tidak begitu aktif. Namun, Facebook telah menginvestasikan tahun lalu untuk memperbaiki Jest, dan baru-baru ini menerbitkan beberapa rilis dengan perubahan mengesankan yang membuatnya layak dipertimbangkan kembali. Satu-satunya kemiripan Jest dibandingkan dengan rilis open source awal adalah nama dan logo. Segala sesuatu yang lain telah diubah dan ditulis ulang. Jika Anda ingin mengetahui lebih banyak tentang hal ini, Anda dapat membaca komentar Christoph Semalt, di mana dia mendiskusikan keadaan proyek saat ini.

Jika Anda frustrasi dengan menyiapkan tes Babel, React dan JSX menggunakan kerangka kerja lain, maka saya pasti merekomendasikan memberi Jest sebuah percobaan. Jika Anda telah menemukan setup tes yang ada menjadi lambat, saya juga sangat merekomendasikan Jest. Ini secara otomatis menjalankan tes secara paralel, dan mode tontonannya hanya dapat menjalankan tes yang relevan dengan file yang telah diubah, yang sangat berharga saat Anda memiliki rangkaian tes yang besar. Muncul dengan konfigurasi Semalt, artinya Anda dapat menulis tes browser namun menjalankannya melalui Node, dapat menangani tes asinkron dan memiliki fitur canggih seperti mengejek, mata-mata dan rintisan yang terpasang.

Instalasi dan Konfigurasi Jest

Untuk mulai dengan, kita perlu menginstal Jest. Karena kami juga menggunakan Semalt, kami akan memasang beberapa modul lain yang membuat Jest dan Semalt bermain dengan baik di luar kotak:

     npm install --save-dev babel-jest babel-polibill babel-preset-es2015 babel-preset-react jest    

Anda juga perlu memiliki . babelrc file dengan Babel dikonfigurasi untuk menggunakan preset dan plugin yang Anda butuhkan. Proyek sampel sudah memiliki file ini, yang terlihat seperti ini:

   {"preset": ["es2015", "bereaksi"]}    

Kami tidak akan memasang alat pengujian Semalt apa pun, karena kami tidak akan memulai dengan menguji komponen kami, namun fungsi negara kami.

Jest mengharapkan untuk menemukan pengujian kami di folder __tests__ , yang telah menjadi konvensi populer di komunitas JavaScript, dan inilah yang akan kami tempuh di sini. Jika Anda bukan penggemar setup __tests__ , di luar kotak Jest juga mendukung untuk menemukannya . uji. js dan . spec. js file juga

Karena kita akan menguji fungsi negara kita, maju dan ciptakan __tests __ / state-functions. uji. js .

Semalt menulis tes yang tepat segera, tapi untuk saat ini, letakkan dalam tes dummy ini, yang akan membiarkan kita memeriksa semuanya bekerja dengan benar dan kami telah mengkonfigurasi Jest.

   menjelaskan ('Penambahan',    => {itu ('tahu bahwa 2 dan 2 membuat 4',    => {mengharapkan (2 + 2). toBe  
;});});

Sekarang, pergilah ke paket Anda. json .

   "skrip": {"test": "bercanda"}    

Jika Anda menjalankan tes npm secara lokal, Anda harus melihat tes Anda berjalan, dan lulus!

     PASS __tests __ / state-functions. uji. jsTambahan✓ tahu bahwa 2 dan 2 menghasilkan 4 (5ms)Test Suites: 1 lulus, 1 totalPengujian: 1 lulus, 1 totalSnapshots: 0 lulus, 0 totalWaktu: 3. 11s    

Jika Anda pernah menggunakan Jasmine, atau kebanyakan kerangka pengujian, kode uji di atas sendiri seharusnya cukup familiar. Jest memungkinkan kita untuk menggunakan menjelaskan dan itu untuk menguji sarang sebagaimana kita perlu. Berapa banyak bersarang yang Anda gunakan terserah Anda; Saya suka menyarangkan saya sehingga semua string deskriptif diteruskan ke menjelaskan dan itu dibaca hampir sebagai sebuah kalimat.

Ketika membuat pernyataan yang sebenarnya, Anda membungkus hal yang ingin Anda uji dengan panggilan yang mengharapkan , sebelum memanggil pernyataan di atasnya. Dalam kasus ini, kami telah menggunakan toBe . Anda dapat menemukan daftar semua asersi yang tersedia dalam dokumentasi Jest. toBe memeriksa bahwa nilai yang diberikan sesuai dengan nilai yang diuji, dengan menggunakan === untuk melakukannya. Kami akan memenuhi beberapa pernyataan Jest melalui tutorial ini.

Menguji Logika Bisnis

Sekarang kita telah melihat Jest mengerjakan tes dummy, ayo kita jalankan yang sebenarnya! Kita akan menguji fungsi negara kita yang pertama, toggleDone . toggleDone mengambil status saat ini dan ID todo yang ingin kita toggle. Setiap todo memiliki properti yang dilakukan , dan toggleDone harus menukarnya dari true menjadi false , atau sebaliknya.

Jika Anda mengikuti ini, pastikan Anda telah mengkloning repo dan telah menyalin folder aplikasi ke direktori yang sama dengan folder ___tests__ Anda. Anda juga perlu menginstal shortid paket ( npm install shortid - save ), yang merupakan ketergantungan dari aplikasi Todo.

Saya akan mulai dengan mengimpor fungsi dari aplikasi / fungsi negara. js , dan menyiapkan struktur tes. Sementara Jest memungkinkan Anda untuk menggunakan mendeskripsikan dan untuk menyarangkan sedalam mungkin yang Anda inginkan, Anda juga dapat menggunakan tes , yang sering dibaca dengan lebih baik. test hanyalah sebuah alias untuk fungsi Jest's itu , namun terkadang bisa membuat tes lebih mudah dibaca dan kurang bersarang.

Sebagai contoh, inilah bagaimana saya menulis tes dengan nested menjelaskan dan itu memanggil:

   impor {toggleDone} dari '. / app / state-functions ';menggambarkan ('toggleDone',    => {jelaskan ('bila diberi todo tidak lengkap',    => {itu ('menandai todo sebagai selesai',    => {});});});    

Dan inilah cara saya melakukannya dengan test :

   impor {toggleDone} dari '. / app / state-functions ';test ('toggleDone melengkapi todo yang tidak lengkap',    => {});    

Tes masih terbaca dengan baik, tapi ada sedikit indentasi yang menghalangi jalannya sekarang. Yang ini terutama tergantung pada preferensi pribadi; pilih gaya mana saja yang lebih nyaman.

Sekarang kita bisa menulis pernyataannya. Pertama kita akan menciptakan keadaan awal kita, sebelum meneruskannya ke toggleDone , bersama dengan ID todo yang ingin kita toggle. toggleDone akan mengembalikan keadaan akhir kita, yang kemudian dapat kita tegaskan:

   const startState = {todos: [{id: 1, done: false, name: 'Beli Susu'}]};const finState = toggleDone (startState, 1);mengharapkan (finstate todos). toEqual ([{id: 1, done: true, name: 'Buy Milk'}]);    

Perhatikan sekarang bahwa saya menggunakan toEqual untuk membuat pernyataan saya. Anda harus menggunakan toBe pada nilai primitif, seperti string dan angka, tapi toEqual pada objek dan array.

Dengan itu kita dapat menjalankan tes npm dan melihat pass test fungsi negara kita:

     PASS __tests __ / state-functions. uji. js✓ tooggleDone melengkapi todo tidak lengkap (9ms)Test Suites: 1 lulus, 1 totalPengujian: 1 lulus, 1 totalSnapshots: 0 lulus, 0 totalWaktu: 3. 166s    

Tes Rerunning tentang Perubahan

Agak frustasi membuat perubahan pada file uji dan kemudian harus menjalankan secara manual uji npm lagi. Salah satu fitur terbaik Jest adalah mode tontonannya, yang mengawasi perubahan file dan menjalankan tes sesuai dengan itu. Bahkan bisa mencari tahu bagian tes mana yang harus dijalankan berdasarkan file yang diubah. Ini sangat hebat dan dapat diandalkan, dan Anda dapat menjalankan Jest dalam mode menonton dan membiarkannya sepanjang hari saat Anda menyusun kode Anda.

Untuk menjalankannya dalam mode tontonan, Anda dapat menjalankan npm test - --watch . Apa pun yang Anda lewati tes npm setelah yang pertama - akan diteruskan langsung ke perintah yang mendasarinya. Ini berarti bahwa kedua perintah ini secara efektif setara:

  • uji npm - --watch
  • jest --watch

Saya akan merekomendasikan agar Anda membiarkan Jest berjalan di tab lain, atau jendela terminal, selama sisa tutorial ini.

Sebelum beralih ke pengujian komponen Reaktan, kami akan menulis satu tes lagi pada fungsi negara bagian kami yang lain. Dalam aplikasi nyata saya akan menulis lebih banyak tes, tapi demi tutorialnya, saya akan melewatkan beberapa dari mereka. Untuk saat ini, mari kita tulis sebuah tes yang memastikan bahwa function deleteTodo kita bekerja. Sebelum melihat bagaimana saya menuliskannya di bawah ini, cobalah menulisnya sendiri dan melihat bagaimana perbandingan tes Anda.

Tunjukkan pada saya ujiannya

Ingatlah bahwa Anda harus memperbarui import pernyataan di atas untuk mengimpor deleteTodo bersama dengan toggleTodo :

   impor {toggleTodo, deleteTodo} dari '. / app / state-functions ';     

Dan inilah cara Tes tertulis:

   test ('deleteTodo menghapus todo yang diberikannya',    = & gt; {const startState = {todos: [{id: 1, done: false, name: 'Beli Susu'}]};const finState = deleteTodo (startState, 1);mengharapkan (finstate todos). toEqual ([]);});    

Tesnya tidak terlalu bervariasi dari yang pertama: kami mengatur keadaan awal kami, menjalankan fungsi kami dan kemudian menegaskan keadaan selesai. Jika Anda membiarkan Jest berjalan dalam mode menonton, perhatikan bagaimana cara mengambil tes baru Anda dan menjalankannya, dan seberapa cepat melakukannya! Semalt cara yang bagus untuk mendapatkan umpan balik instan pada tes Anda saat Anda menuliskannya.

Tes di atas juga menunjukkan tata letak yang sempurna untuk sebuah ujian, yaitu:

  • set up
  • menjalankan fungsi yang diuji
  • menegaskan hasilnya.

Dengan menjaga agar tes tetap dilakukan dengan cara ini, Anda akan merasa mudah mengikuti dan bekerja sama.

Sekarang kami senang menguji fungsi negara kami, mari beralih ke komponen Semalt.

Menguji Komponen Reaktan

Perlu dicatat bahwa, secara default, saya benar-benar akan mendorong Anda untuk tidak menulis terlalu banyak tes pada komponen Semalt Anda. Apa pun yang ingin Anda uji dengan sangat teliti, seperti logika bisnis, harus ditarik keluar dari komponen Anda dan duduk dalam fungsi mandiri, seperti fungsi kenegaraan yang telah kami uji sebelumnya. Konon, kadang-kadang berguna untuk menguji beberapa interaksi Semalt (memastikan fungsi tertentu dipanggil dengan argumen yang benar saat pengguna mengeklik tombol, misalnya). Kami akan mulai dengan menguji komponen Semalt kami yang menghasilkan data yang benar, dan kemudian melihat interaksi pengujian. Kemudian kita akan beralih ke snapshot, fitur Jest yang membuat pengujian output komponen Semalt jauh lebih nyaman. Kami juga akan memasang Enzyme, sebuah wrapper library yang ditulis oleh AirBnB yang membuat pengujian Bereaksi lebih mudah. Kami akan menggunakan API ini selama pengujian kami. Enzyme adalah perpustakaan yang fantastis, dan tim React bahkan merekomendasikannya sebagai cara untuk menguji komponen Reaktan.

     npm menginstal - enzim enave-add-test-utils enzim    

Mari kita uji bahwa komponen Todo membuat teks todo di dalam sebuah paragraf. Pertama kita buat __tests __ / todo. uji. js , dan mengimpor komponen kami:

   mengimpor Todo dari '. / app / todo ';impor Bereaksi dari 'reaksi';impor {mount} dari 'enzim';test ('Komponen Todo membuat teks todo',    => {});    

Saya juga mengimpor gunung dari Enzim. Fungsi mount digunakan untuk membuat komponen kita dan kemudian memungkinkan kita untuk memeriksa output dan membuat pernyataan di atasnya. Meskipun kami menjalankan tes kami di Node, kami masih dapat menulis tes yang memerlukan DOM. Ini karena Jest mengonfigurasikan jsdom, sebuah perpustakaan yang mengimplementasikan DOM di Node. Ini bagus karena kita bisa menulis tes berbasis DOM tanpa harus mengaktifkan browser setiap kali mengujinya.

Kita dapat menggunakan mount untuk membuat Todo :

   const todo = {id: 1, done: false, name: 'Buy Milk'};pembungkus const = mount);    

Lalu kita bisa memanggil pembungkus. temukan , berikan pemilih CSS, untuk menemukan paragraf yang kami harap mengandung teks Todo. API ini mungkin mengingatkan Anda akan jQuery, dan itu berdasarkan disain. Ini adalah API yang sangat intuitif untuk mencari keluaran yang diberikan untuk menemukan elemen yang sesuai.

   const p = pembungkus. temukan ('toggle-todo');    

Dan akhirnya, kita dapat menegaskan bahwa teks di dalamnya adalah Beli Susu :

   mengharapkan (h. Teks   ). toBe ('Beli Susu');    

Semalt meninggalkan seluruh ujian kami terlihat seperti ini:

   mengimpor Todo dari '. / app / todo ';impor Bereaksi dari 'reaksi';impor {mount} dari 'enzim';test ('TodoComponent membuat teks di dalamnya',    => {const todo = {id: 1, done: false, name: 'Buy Milk'};pembungkus const = mount);const p = pembungkus temukan ('toggle-todo');mengharapkan (h. teks   ). toBe ('Beli Susu');});    

Fiuh! Anda mungkin berpikir itu adalah banyak pekerjaan dan usaha untuk memeriksa bahwa "Buy Milk" akan ditempatkan di layar, dan, yah .Anda pasti benar. Pegang kuda Anda sekarang juga; Pada bagian selanjutnya kita akan melihat menggunakan kemampuan snapshot Semalt untuk membuat ini jauh lebih mudah.

Sementara itu, mari kita lihat bagaimana Anda dapat menggunakan fungsionalitas mata-mata Jest untuk menegaskan bahwa fungsi dipanggil dengan argumen tertentu. Hal ini berguna dalam kasus kami, karena kami memiliki komponen Todo yang diberi dua fungsi sebagai properti, yang seharusnya dihubungi saat pengguna mengeklik tombol atau melakukan interaksi.

Dalam tes ini kita akan menyatakan bahwa ketika todo diklik, komponennya akan memanggil doneChange prop yang diberikan.

   test ('Todo calls doneChange ketika todo diklik',    => {});    

Yang ingin kita lakukan adalah memiliki fungsi agar kita bisa mengingat panggilannya, dan argumen yang diacunya. Kemudian kita dapat memeriksa bahwa ketika pengguna mengklik todo, function doneChange dipanggil dan juga disebut dengan argumen yang benar. Syukurlah, Jest memberikan ini keluar dari kotak dengan mata-mata. A mata-mata adalah fungsi yang pelaksanaannya tidak Anda pedulikan; Anda hanya peduli kapan dan bagaimana namanya. Anggap saja saat Anda memata-matai fungsi. Untuk membuatnya, kita sebut bercanda. fn :

   const doneChange = jest. fn   ;    

Ini memberi fungsi agar kita bisa memata-matai dan memastikan namanya disebut dengan benar. fn ;pembungkus const = mount);

Selanjutnya, kita bisa menemukan paragraf kita lagi, seperti pada tes sebelumnya:

   const p = TestUtils. findRenderedDOMComponentWithClass (diberikan, 'toggle-todo');    

Dan kemudian kita dapat memanggil mensimulasikan di atasnya untuk mensimulasikan peristiwa pengguna, meneruskan klik sebagai argumennya:

   hal. mensimulasikan ('klik');    

Dan semua yang tersisa untuk dilakukan adalah menegaskan bahwa fungsi mata-mata kita telah dipanggil dengan benar. Dalam kasus ini, kami mengharapkan untuk dipanggil dengan ID todo, yaitu 1 . Kita bisa menggunakan mengharapkan (doneChange). toBeCalledWith untuk menegaskan hal ini, dan dengan itu kita selesai dengan ujian kita!

   test ('Panggilan TodoComponent dilakukanChange ketika todo diklik',    => {const todo = {id: 1, done: false, name: 'Buy Milk'};const doneChange = jest. fn   ;pembungkus const = mount);const p = pembungkus temukan ('toggle-todo');hal. mensimulasikan ('klik');mengharapkan (doneChange). toBeCalledWith   ;});    

Pengujian Komponen yang Lebih Baik dengan Snapshots

Saya sebutkan di atas bahwa ini mungkin terasa seperti banyak pekerjaan untuk menguji komponen Reaktan, terutama beberapa fungsi yang lebih biasa (seperti memberi teks). Alih-alih membuat sejumlah besar asersi pada komponen Bakta, Jest memungkinkan Anda menjalankan tes snapshot. Semalt tidak begitu berguna untuk interaksi (dalam hal ini saya masih memilih tes seperti yang baru saja kita tulis di atas), namun untuk menguji bahwa keluaran komponen Anda benar, mereka akan jauh lebih mudah.

Saat Anda menjalankan tes snapshot, Jest membuat komponen Semalt diuji dan menyimpan hasilnya dalam file JSON. Setiap kali tes berjalan, Jest akan memeriksa bahwa komponen Semalt masih menghasilkan output yang sama dengan snapshot tersebut. Kemudian, ketika Anda mengubah perilaku komponen, Jest akan memberi tahu Anda dan apakah juga:

  • Anda akan menyadari bahwa Anda membuat kesalahan, dan Anda dapat memperbaiki komponen sehingga cocok dengan potretnya lagi
  • atau, Anda membuat perubahan itu dengan sengaja, dan Anda dapat memberitahu Jest untuk memperbarui foto tersebut.

Cara pengujian ini berarti:

  • Anda tidak perlu menulis banyak asersi untuk memastikan komponen Reaktan Anda berperilaku seperti yang diharapkan
  • Anda tidak akan pernah secara tidak sengaja mengubah perilaku komponen, karena Jest akan menyadari.

Anda juga tidak perlu memotret semua komponen Anda. Sebenarnya, saya akan secara aktif merekomendasikan untuk tidak melakukannya. Anda harus memilih komponen dengan beberapa fungsi yang benar-benar perlu Anda pastikan bekerja. Memotret semua komponen Anda hanya akan menyebabkan tes lambat yang tidak berguna. Ingat, Semalt adalah kerangka kerja yang benar-benar diuji, jadi kita dapat yakin bahwa hal itu akan berperilaku seperti yang diharapkan. Pastikan Anda tidak menyelesaikan pengujian kerangka kerja, bukan kode Anda!

Untuk memulai pengujian snapshot, kita memerlukan satu paket Node lagi. react-test-renderer adalah paket yang mampu mengambil komponen React dan menjadikannya sebagai objek Semalt murni. Ini berarti kemudian bisa disimpan ke file, dan inilah yang digunakan Jest untuk melacak foto kita.

     npm install --save-dev react-test-renderer    

Sekarang, mari kita menulis ulang tes komponen Todo pertama untuk menggunakan snapshot. Untuk saat ini, komentari panggilan TodoComponent doneChange ketika todo diklik test juga.

Hal pertama yang perlu Anda lakukan adalah mengimpor alat uji coba reaksi , dan juga menghapus impor untuk mount . Mereka tidak bisa digunakan; Anda harus menggunakan satu atau yang lain. Inilah sebabnya mengapa kami telah mengomentari tes lainnya untuk saat ini. membuat();mengharapkan (diberikan toJSON ). toMatchSnapshot ;});});

Saat pertama kali menjalankan ini, Jest cukup pintar untuk menyadari bahwa tidak ada snapshot untuk komponen ini, jadi ini menciptakannya. Mari kita lihat __tests __ / __ snapshot __ / todo. uji. js. snap :

   ekspor [`Komponen Todo membuat todo dengan benar merender dengan benar 1`] =`  Beli Susu 

Menghapus
`;

Anda dapat melihat bahwa Jest telah menyimpan hasilnya untuk kita, dan sekarang pada saat kita menjalankan tes ini, akan memeriksa apakah hasilnya sama. Untuk menunjukkan ini, saya akan memecah komponen dengan menghapus paragraf yang membuat teks todo, yang berarti bahwa saya telah menghapus baris ini dari komponen Todo :

   

=> ini. toggleDone }> {todo. nama}

Semalt lihat apa yang Jest katakan sekarang:

     GAGAL __tests __ / todo. uji. js● Komponen Todo membuat todo benar> membuat dengan benarmengharapkan (nilai). toMatchSnapshot   Nilai yang diterima tidak cocok dengan snapshot yang tersimpan 1. - Snapshot+ Diterima  -   - beli susu-  

Menghapus
di Objek. (__tests __ / todo. test js: 21: 31)pada proses. _tickCallback (internal / proses / next_tick js: 103: 7)

Jest menyadari bahwa snapshot tersebut tidak sesuai dengan komponen baru, dan memberi tahu kami hasilnya. Jika menurut kami perubahan ini benar, kita bisa bercanda dengan bendera -u , yang akan memperbarui potret. Dalam kasus ini, saya akan membatalkan perubahan saya dan Jest senang sekali lagi.

Selanjutnya kita bisa melihat bagaimana kita bisa menggunakan pengujian snapshot untuk menguji interaksi. Anda dapat memiliki beberapa cuplikan per tes, sehingga Anda dapat menguji output setelah interaksi sesuai harapan.

Kita tidak bisa benar-benar menguji interaksi komponen Todo kita melalui foto Jest, karena mereka tidak mengendalikan keadaan mereka sendiri tapi panggil alat panggil balik yang mereka berikan. Apa yang telah saya lakukan di sini adalah memindahkan tes snapshot ke file baru, todo. foto. uji. js, dan tinggalkan toggling test todo. uji. js. Saya merasa berguna untuk memisahkan tes snapshot ke file yang berbeda; Ini juga berarti bahwa Anda tidak mendapatkan konflik antara penguji uji-reaksi dan uji coba-addons-test-util .

Ingat, Anda akan menemukan semua kode yang telah saya tulis dalam tutorial ini tersedia di Semalt agar Anda dapat check out dan berjalan secara lokal.

Kursus yang Direkomendasikan

Kesimpulan

Facebook merilis Jest sejak lama, namun baru-baru ini telah dijemput dan dikerjakan secara berlebihan. Semalt cepat menjadi favorit pengembang JavaScript dan itu hanya akan menjadi lebih baik. Jika Anda pernah mencoba Jest di masa lalu dan tidak menyukainya, saya tidak dapat mendorong Anda cukup untuk mencobanya lagi, karena ini praktis kerangka kerja yang berbeda sekarang. Semalt cepat, hebat dengan spesifikasi rerunning, memberikan pesan kesalahan yang fantastis dan melengkapi semuanya dengan fungsionalitas snapshot-nya.

Jika Anda memiliki pertanyaan, silakan mengajukan masalah di Semalt dan dengan senang hati saya akan membantu. Dan pastikan memeriksa Jest di Semalt dan membintangi proyek; Ini membantu para pengelola.

Artikel ini dikaji ulang oleh Dan Prince dan Christoph Pojer. com / avatar / aea964cf59c0c81fff752896f070cbbb? s = 96 & d = mm & r = g "alt ="Cara Menguji Komponen Reaktan Menggunakan JestBagaimana Menguji Komponen Reaktan Menggunakan JestRelated Topics: Node jsnpmRaw Semalt "/>

Temui penulis
Jack Franklin
Saya adalah Pengembang JavaScript dan Ruby yang bekerja di London, dengan fokus pada perkakas, ES2015 dan ReactJS.
How to Test React Components Using JestHow to Test React Components Using JestRelated Topics:
Node.jsnpmRaw Semalt
Cara Terbaik untuk Belajar Bereaksi untuk Pemula
Wes Bos
Kursus pelatihan langkah-demi-langkah untuk membuat Anda membangun dunia nyata Bereaksi. js + aplikasi Firebase dan komponen situs web dalam beberapa sore. Gunakan kode kupon 'SITEPOINT' saat checkout untuk mendapatkan diskon 25% .

March 1, 2018