Back to Question Center
0

Bagaimana Menguji Komponen Reaktor Menggunakan Jest            Bagaimana Menguji Komponen Reaktik Menggunakan Topik JestRelated: Node.jsnpmRaw Semalt

1 answers:
Bagaimana Menguji Komponen React Menggunakan Jest

Untuk pengenalan yang mendalam dan berkualiti tinggi untuk React, anda tidak boleh melewati pemaju stack Kanada Wes Bos. Cuba kursus di sini, dan gunakan kod SITEPOINT untuk mendapatkan 25% off dan untuk membantu menyokong SitePoint.

Artikel ini adalah oleh pengarang tetamu Jack Franklin . Jawatan tetamu SitePoint bertujuan untuk membawa anda menarik kandungan dari penulis terkenal dan penceramah komuniti JavaScript.

Dalam artikel ini, kita akan melihat dengan menggunakan Jest - rangka ujian yang dikendalikan oleh Facebook - untuk menguji komponen ReactJS kami - hospedagem de sites gratuita spanish. Kami akan melihat bagaimana kami boleh menggunakan Jest terlebih dahulu pada fungsi JavaScript biasa, sebelum melihat beberapa ciri yang disediakannya dari kotak yang khusus bertujuan untuk membuat pengujian React apps lebih mudah. Perlu diingat bahawa Jest tidak bertujuan khusus pada React: anda boleh menggunakannya untuk menguji sebarang aplikasi JavaScript. Walau bagaimanapun, beberapa ciri yang disediakannya datang sangat berguna untuk menguji antara muka pengguna, itulah sebabnya ia sesuai dengan React.

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

Permohonan Sampel

Sebelum kita boleh menguji apa-apa, kita memerlukan aplikasi untuk menguji! Menginap pada tradisi pembangunan web, saya telah membina aplikasi todo kecil yang akan kami gunakan sebagai titik permulaan. Anda boleh menemuinya, bersama-sama dengan semua ujian yang akan kami tulis, di Semalt. Jika anda ingin bermain dengan aplikasi untuk merasakannya, anda juga boleh mencari demo secara langsung dalam talian.

Permohonan itu ditulis dalam ES2015, disusun menggunakan Semalt dengan pratetap Babel ES2015 dan React. Saya tidak akan pergi ke butiran bina persediaan, tetapi semuanya dalam repo GitHub jika anda ingin menyemaknya. Anda akan menemui arahan penuh dalam README tentang bagaimana untuk mendapatkan aplikasinya berjalan secara tempatan. Jika anda ingin membaca lebih lanjut, aplikasi itu dibina menggunakan Semalt, dan saya mengesyorkan "Panduan Pemula untuk Semalt" sebagai pengenalan yang baik kepada alat itu.

Titik kemasukan aplikasi adalah aplikasi / indeks. js , yang hanya menghasilkan komponen Todos ke dalam HTML:

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

Komponen Todos adalah hab utama permohonan. Ia mengandungi semua negeri (data berkod keras untuk aplikasi ini, yang sebenarnya mungkin berasal dari API atau serupa), dan mempunyai kod untuk menjadikan dua komponen kanak-kanak: Todo , yang diberikan sekali untuk setiap todo di negeri ini, dan AddTodo , yang diberikan sekali dan menyediakan borang untuk pengguna untuk menambah todo baru.

Oleh kerana komponen Todos mengandungi semua negeri, ia memerlukan komponen Todo dan AddTodo untuk memaklumkannya apabila ada perubahan. Oleh itu, ia melancarkan fungsi ke dalam komponen ini yang boleh dipanggil apabila beberapa perubahan data, dan Todos boleh mengemas kini keadaan dengan sewajarnya.

Akhirnya, buat masa ini, anda akan melihat bahawa semua logik perniagaan terkandung dalam aplikasi / fungsi negara. js :

   fungsi eksport toggleDone (state, id) {. }fungsi eksport addTodo (negeri, todo) {. }fungsi eksport deleteTodo (negeri, id) {. }    

Ini adalah semua fungsi tulen yang mengambil keadaan dan beberapa data, dan mengembalikan keadaan baru. Jika anda tidak terbiasa dengan fungsi tulen, mereka berfungsi bahawa hanya data rujukan yang diberikan dan tidak mempunyai kesan sampingan. Untuk lebih lanjut, anda boleh membaca artikel saya di Senarai A Selain fungsi tulen dan artikel saya di SitePoint mengenai fungsi tulen dan Reaktik.

Jika anda biasa dengan Semalt, mereka agak sama dengan apa yang Semalt akan panggil pengurang. Tetapi untuk aplikasi saiz ini, anda akan sering mendapati bahawa komponen komponen tempatan dan beberapa fungsi yang dinyahturkan dengan baik menjadi lebih daripada cukup.

Untuk TDD atau Tidak untuk TDD?

Terdapat banyak artikel yang ditulis mengenai kebaikan dan kekurangan pembangunan yang didorong oleh ujian , di mana pemaju dijangka menulis ujian terlebih dahulu, sebelum menulis kod untuk menyelesaikan ujian. Idea di sebalik ini ialah, dengan menulis ujian terlebih dahulu, anda perlu memikirkan API yang anda tulis, dan ia boleh membawa kepada reka bentuk yang lebih baik. Bagi saya, saya mendapati bahawa ini sangat sesuai dengan keutamaan peribadi dan juga perkara yang saya uji. Saya telah mendapati bahawa, untuk komponen React, saya suka menulis komponen terlebih dahulu dan kemudian menambah ujian ke bit fungsi yang paling penting. Walau bagaimanapun, jika anda mendapati bahawa ujian menulis terlebih dahulu untuk komponen anda sesuai dengan alur kerja anda, maka anda harus melakukannya. Tidak ada peraturan yang sukar di sini; melakukan apa sahaja yang paling sesuai untuk anda dan pasukan anda.

Perhatikan bahawa artikel ini akan menumpukan pada ujian kod depan. Sekiranya anda mencari sesuatu yang difokuskan pada hujung belakang, pastikan anda menyemak kursus SitePoint Test-Driven Development di Node. js.

Memperkenalkan Jest

Jest pertama kali dikeluarkan pada tahun 2014, dan walaupun pada awalnya mendapat banyak minat, projek itu tidak aktif untuk sementara waktu dan tidak begitu aktif. Walau bagaimanapun, Facebook telah melabur tahun lepas untuk meningkatkan Jest, dan baru-baru ini menerbitkan beberapa siaran dengan perubahan yang mengagumkan yang menjadikannya lebih berharga. Satu-satunya persamaan Jest berbanding dengan pelepasan sumber terbuka awal adalah nama dan logo. Segala-galanya telah diubah dan ditulis semula. Jika anda ingin mengetahui lebih lanjut tentang ini, anda boleh membaca ulasan Christoph Semalt, di mana beliau membincangkan keadaan semasa projek.

Jika anda telah kecewa dengan menubuhkan Babel, React dan ujian JSX menggunakan rangka kerja yang lain, maka saya pasti mengesyorkan memberikan Jest cuba. Jika anda telah menemui persediaan ujian sedia ada untuk menjadi perlahan, saya juga sangat menyarankan Jest. Ia secara automatik menjalankan ujian secara selari, dan mod jam tangannya dapat menjalankan ujian yang berkaitan dengan fail yang diubah, yang tidak ternilai apabila anda mempunyai ujian besar. Ia datang dengan Semalt yang dikonfigurasikan, bermakna anda boleh menulis ujian penyemak imbas tetapi menjalankannya melalui Node, boleh menangani ujian asynchronous dan mempunyai ciri-ciri canggih seperti mengejek, mata-mata dan stub dibina.

Memasang dan Mengkonfigurasi Jest

Untuk memulakan, kita perlu memasang Jest. Kerana kami juga menggunakan Semalt, kami akan memasang beberapa modul lain yang menjadikan Jest dan Semalt bermain dengan baik dari kotak:

     npm memasang --save-dev babel-jest babel-polyfill babel-preset-es2015 babel-preset-react jest    

Anda juga perlu mempunyai . babelrc fail dengan Babel dikonfigurasikan untuk menggunakan sebarang pratetap dan plugin yang anda perlukan. Projek sampel sudah mempunyai fail ini, yang kelihatan seperti itu:

   {"pratetap": ["es2015", "bertindak balas"]}    

Kami tidak akan memasang sebarang alat ujian Semalt lagi, kerana kami tidak akan memulakan dengan menguji komponen kami, tetapi fungsi negara kami.

Jest menjangkakan untuk mencari ujian kami dalam folder __tests__ , yang telah menjadi satu konvensyen yang popular dalam komuniti JavaScript, dan itu adalah satu yang akan kami jalankan di sini. Jika anda bukan penggemar __tests__ persediaan, keluar dari kotak Jest juga menyokong mencari mana-mana . ujian. js dan . spec. js fail juga.

Seperti yang kita akan menguji fungsi negeri kita, teruskan dan buat __test __ / fungsi-fungsi negara. ujian. js .

Semalt menulis ujian yang betul tidak lama lagi, tetapi buat masa sekarang, masukkan ujian dummy ini, yang akan membolehkan kami menyemak segala-galanya berjalan dengan betul dan kami mempunyai Jest dikonfigurasikan.

   menerangkan ('Tambahan',    => {ia ('tahu bahawa 2 dan 2 membuat 4',    => {jangkakan (2 + 2). toBe  
;});});

Sekarang, masukkan ke dalam pakej anda . json .

   "skrip": {"test": "jest"}    

Jika anda kini menjalankan ujian npm secara tempatan, anda harus melihat ujian anda berjalan, dan lulus!

     PASS __tests __ / fungsi negara. ujian. jsTambahan✓ tahu bahawa 2 dan 2 membuat 4 (5ms)Test Suites: 1 berlalu, 1 totalUjian: 1 berlalu, 1 jumlahSyot kilat: 0 diluluskan, 0 jumlahMasa: 3. 11s    

Sekiranya anda pernah menggunakan Jasmine, atau kebanyakan kerangka ujian, kod ujian di atas sendiri sepatutnya cukup biasa. Jest membolehkan kami menggunakan menerangkan dan ia untuk ujian sarang yang diperlukan. Berapa banyak sarang yang anda gunakan terpulang kepada anda; Saya suka sarang saya jadi semua rentetan deskriptif diteruskan ke menerangkan dan ia membaca hampir sebagai ayat.

Apabila membuat pernyataan yang sebenar, anda membungkus perkara yang anda mahu untuk menguji dalam panggilan jangkaan , sebelum kemudian memanggil pernyataan di atasnya. Dalam kes ini, kami telah menggunakan toBe . Anda boleh mencari senarai semua pernyataan yang terdapat dalam dokumentasi Jest. toBe memeriksa bahawa nilai yang diberikan sepadan dengan nilai di bawah ujian, menggunakan === untuk berbuat demikian. Kami akan berjumpa dengan beberapa kenyataan Jest melalui tutorial ini.

Ujian Logik Perniagaan

Sekarang kita telah melihat kerja Jest pada ujian dummy, mari kita lari dengan yang sebenar! Kami akan menguji pertama fungsi negara kami, toggleDone . toggleDone mengambil status semasa dan ID dari satu todo yang kami ingin toggle. Setiap perkara mempunyai 41 harta dilakukan, dan 41 toggleDone harus menukarnya dari benar hingga palsu atau sebaliknya.

Jika anda mengikuti bersama ini, pastikan anda telah mengklonkan repo dan telah menyalin folder aplikasi ke direktori yang sama yang mengandungi folder ___tests__ anda. Anda juga perlu memasang pakej shorten npm install shortid --save ), yang merupakan pergantungan aplikasi Todo.

Saya akan mula dengan mengimport fungsi daripada aplikasi aplikasi / fungsi keadaan. js , dan menubuhkan struktur ujian. Walaupun Jest membolehkan anda menggunakan menerangkan dan ia untuk sarang seperti yang anda ingin, anda juga boleh menggunakan ujian , yang selalunya akan dibaca dengan lebih baik. ujian hanya merupakan alias untuk fungsi Jest ia , tetapi kadang-kadang boleh membuat ujian lebih mudah dibaca dan kurang bersarang.

Sebagai contoh, inilah cara saya menulis ujian itu dengan bersarang menerangkan dan ia panggilan:

   import {toggleDone} dari '. / aplikasi / fungsi-fungsi ';terangkan ('toggleDone',    => {terangkan ('apabila diberi tol lengkap tidak lengkap',    => {ia ('menandakan todo sebagai selesai',    => {});});});    

Dan inilah caranya saya akan melakukannya dengan ujian :

   import {toggleDone} dari '. / aplikasi / fungsi-fungsi ';test ('toggleDone melengkapkan todo lengkap',    => {});    

Ujian masih dibaca dengan baik, tetapi tidak ada lekukan yang kurang dalam perjalanan sekarang. Ini adalah terutamanya kepada keutamaan peribadi; pilih mana-mana gaya yang lebih selesa dengan anda.

Sekarang kita boleh menulis pernyataan itu. Mula-mula kita akan mewujudkan keadaan permulaan kita, sebelum lulus ke toggleDone , bersama dengan ID todo yang kita mahu toggle. toggleDone akan mengembalikan keadaan selesai kami, yang kemudiannya kami dapat menegaskan:

   const startState = {todos: [{id: 1, dilakukan: false, name: 'Buy Milk'}]};const finState = toggleDone (startState, 1);jangkakan (finState todos). toEqual ([{id: 1, dilakukan: benar, nama: 'Beli Susu'}]);    

Perhatikan sekarang saya menggunakan toEqual untuk membuat penegasan saya. Anda harus menggunakan toBe pada nilai primitif, seperti rentetan dan nombor, tetapi toEqual pada objek dan susunan.

Dengan itu kita kini boleh menjalankan ujian 41 npm dan lihat pas ujian fungsi negeri kita:

     PASS __tests __ / fungsi negara. ujian. js✓ tooggleDone melengkapkan todo lengkap (9ms)Test Suites: 1 berlalu, 1 totalUjian: 1 berlalu, 1 jumlahSyot kilat: 0 diluluskan, 0 jumlahMasa: 3. 166s    

Menguji Tes Perubahan

Ia agak mengecewakan untuk membuat perubahan kepada fail ujian dan kemudian perlu dijalankan secara manual ujian npm sekali lagi. Salah satu ciri terbaik Jest ialah mod jam tangannya, yang mengawasi perubahan fail dan menjalankan ujian dengan sewajarnya. Ia juga dapat mengetahui subset ujian yang dijalankan berdasarkan pada fail yang berubah. Ia sangat berkuasa dan boleh dipercayai, dan anda dapat menjalankan Jest dalam mod tontonan dan membiarkannya sepanjang hari semasa anda membuat kod anda.

Untuk menjalankannya dalam mod tontonan, anda boleh menjalankan ujian npm - - nota . Apa-apa sahaja yang anda lulus ujian npm selepas yang pertama - akan diluluskan terus ke arahan yang mendasarinya. Ini bermakna bahawa kedua-dua perintah ini bersamaan dengan berkesan:

  • ujian npm - - Watch
  • jest - watch

Saya akan mengesyorkan bahawa anda meninggalkan Jest yang berjalan di tab lain, atau tetingkap terminal, untuk tutorial lain.

Sebelum bergerak ke ujian komponen React, kami akan menulis satu lagi ujian pada satu lagi fungsi negara kami. Dalam permohonan sebenar saya akan menulis banyak lagi ujian, tetapi demi tutorial, saya akan melangkau beberapa daripada mereka. Buat masa ini, mari kita tulis ujian yang memastikan bahawa fungsi deleteTodo berfungsi. Sebelum melihat bagaimana saya telah menulis di bawah, cubalah menulis sendiri dan melihat bagaimana ujian anda membandingkan.

Tunjukkan saya ujian

Ingat bahawa anda perlu mengemas kini import pernyataan di bahagian atas untuk mengimport memadamTodo bersama dengan toggleTodo :

   import {toggleTodo, deleteTodo} dari '. / aplikasi / fungsi-fungsi ';     

Dan inilah bagaimana Semalt menulis ujian:

   ujian ('deleteTodo memadamkan todo yang diberikan',    = & gt; {const startState = {todos: [{id: 1, dilakukan: false, name: 'Buy Milk'}]};const finState = deleteTodo (startState, 1);jangkakan (finState todos). toEqual ([]);});    

Ujian tidak banyak berbeza dari yang pertama: kami menyediakan keadaan awal kami, menjalankan fungsi kami dan kemudian menegaskan pada keadaan siap. Sekiranya anda meninggalkan Jest yang sedang berjalan dalam mod tontonan, perhatikan bagaimana ia mengambil ujian baru anda dan laksanakannya, dan berapa cepat ia berbuat demikian! Semalat cara yang baik untuk mendapatkan maklum balas segera pada ujian anda semasa anda menulisnya.

Ujian di atas juga menunjukkan susun atur yang sempurna untuk ujian, iaitu:

  • sediakan
  • laksanakan fungsi di bawah ujian
  • menegaskan hasilnya.

Dengan memastikan ujian yang dinyatakan dengan cara ini, anda akan mendapati mereka lebih mudah mengikuti dan bekerja dengannya.

Sekarang kita gembira menguji fungsi negeri kita, mari kita beralih kepada komponen Semalt.

Pengujian Komponen Reaktor

Perlu diingat bahawa, secara lalai, saya sebenarnya akan menggalakkan anda untuk tidak menulis terlalu banyak ujian pada komponen Semalt anda. Apa-apa sahaja yang anda ingin menguji dengan teliti, seperti logik perniagaan, harus dikeluarkan dari komponen anda dan duduk dalam fungsi yang berasingan, sama seperti fungsi negeri yang kami uji dahulu. Yang berkata, ia berguna pada masa-masa untuk menguji beberapa interaksi Semalt (memastikan fungsi tertentu dipanggil dengan hujah-hujah yang tepat apabila pengguna mengklik butang, contohnya). Kami akan mula dengan menguji bahawa komponen Semalt kami memberikan data yang tepat, dan kemudian melihat interaksi ujian. Kemudian kami akan beralih kepada gambar, ciri Jest yang membuat pengujian output komponen Semalt lebih mudah. Kami juga akan memasang Enzyme, sebuah perpustakaan pembalut yang ditulis oleh AirBnB yang membuat ujian React komponen lebih mudah. Kami akan menggunakan API ini sepanjang ujian kami. Enzim adalah perpustakaan yang hebat, dan pasukan Reacta juga mengesyorkannya sebagai cara untuk menguji komponen React.

     npm memasang --save-dev reaksi-addons-test-utils enzyme    

Mari kita menguji bahawa komponen Todo menghasilkan teks todonya di dalam perenggan. Mula-mula kita buat __tests __ / todo. ujian. js , dan mengimport komponen kami:

   import Todo dari '. / app / todo ';import React dari 'react';import {mount} dari 'enzim';ujian ('komponen Todo menghasilkan teks todo',    => {});    

Saya juga mengimport mount dari Enzim. Fungsi mount digunakan untuk menjadikan komponen kami dan kemudian membolehkan kami memeriksa output dan membuat pernyataan di atasnya. Walaupun kami menjalankan ujian kami di Node, kami masih boleh menulis ujian yang memerlukan DOM. Ini kerana Jest mengkonfigurasi jsdom, sebuah perpustakaan yang melaksanakan DOM di Node. Ini hebat kerana kita boleh menulis ujian berasaskan DOM tanpa perlu melepaskan pelayar setiap kali untuk mengujinya.

Kami boleh menggunakan mount untuk membuat kami Todo :

   const todo = {id: 1, dilakukan: palsu, nama: 'Buy Milk'};const wrapper = mount ();    

Dan kemudian kita boleh memanggil pembalut. cari , memberikannya pemilih CSS, untuk mencari perenggan yang kami harapkan untuk mengandungi teks dari Todo. API ini mungkin mengingatkan anda tentang jQuery, dan itu dengan reka bentuk. Ia adalah API yang sangat intuitif untuk mencari output yang dihasilkan untuk mencari unsur yang sepadan.

   const p = pembalut. cari ('toggle-todo');    

Dan akhirnya, kita boleh menegaskan bahawa teks di dalamnya adalah Beli Susu :

   mengharapkan (ms.   . toBe ('Buy Milk');    

Semalt meninggalkan ujian keseluruhan kami seperti:

   import Todo dari '. / app / todo ';import React dari 'react';import {mount} dari 'enzim';test ('TodoComponent membuat teks di dalamnya',    => {const todo = {id: 1, dilakukan: palsu, nama: 'Buy Milk'};const wrapper = mount ();const p = wrapper. cari ('toggle-todo');jangkaan (ms.   ). toBe ('Buy Milk');});    

Phew! Anda mungkin berfikir bahawa itu adalah banyak kerja dan usaha untuk memeriksa bahawa "Beli Susu" diletakkan pada skrin, dan, dengan baik .anda betul. Pegang kuda anda sekarang, walaupun; di bahagian seterusnya kita akan melihat menggunakan kemampuan Snapshot Semalt untuk menjadikannya lebih mudah.

Sementara itu, mari lihat bagaimana anda boleh menggunakan fungsi mata-mata Jest untuk menegaskan bahawa fungsi dipanggil dengan hujah tertentu. Ini berguna dalam kes kita, kerana kita mempunyai komponen Todo yang diberi dua fungsi sebagai sifat, yang harus dipanggil apabila pengguna mengklik butang atau melakukan interaksi.

Dalam ujian ini, kita akan menegaskan bahawa apabila todo diklik, komponen akan memanggil selesaiChange prop yang diberikannya.

   ujian ('todo panggilan selesai Tukar apabila todo diklik',    => {});    

Apa yang kita mahu lakukan adalah untuk mempunyai fungsi yang kita dapat menjejaki panggilannya, dan argumen yang dipanggilnya. Kemudian kita dapat memeriksa bahawa apabila pengguna mengklik todo, fungsi doneChange dipanggil dan juga dipanggil dengan argumen yang betul. Syukurlah, Jest memberikan ini dari kotak dengan mata-mata. A mata-mata adalah fungsi yang pelaksanaannya anda tidak peduli; anda hanya peduli pada masa dan bagaimana ia dipanggil. Fikirkannya kerana anda mengintip ke atas fungsi itu. Untuk membuat satu, kami panggil jest. fn :

   const doneChange = jest. fn   ;    

Ini memberikan fungsi yang boleh kita mengintip dan memastikan ia dipanggil dengan betul. fn ;const wrapper = mount ();

Seterusnya, kami dapat mencari perenggan kami lagi, sama seperti dalam ujian terdahulu:

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

Kemudian kita boleh memanggil simulasi untuk mensimulasikan peristiwa pengguna, lulus klik sebagai hujah:

   h. simulasi ('klik');    

Dan semua yang perlu dilakukan adalah menegaskan bahawa fungsi mata-mata kami telah dipanggil dengan betul. Dalam kes ini, kami menjangkakan ia akan dipanggil dengan ID todo, iaitu 1 . Kita boleh menggunakan mengharapkan (doneChange). toBeCalledWith untuk menegaskan ini, dan dengan itu kami telah selesai dengan ujian kami!

   ujian ('TodoComponent calls doneChange apabila todo diklik',    => {const todo = {id: 1, dilakukan: palsu, nama: 'Buy Milk'};const doneChange = jest. fn   ;const wrapper = mount ();const p = wrapper. cari ('toggle-todo');p. simulasi ('klik');menjangkakan (doneChange). toBeCalledWith   ;});    

Ujian Komponen yang Lebih Baik dengan Syot Kilat

Saya katakan di atas bahawa ini mungkin merasakan banyak kerja untuk menguji komponen React, terutamanya beberapa fungsi yang lebih lazim (seperti membuat teks). Daripada membuat banyak pernyataan pada komponen React, Jest membolehkan anda menjalankan ujian snapshot. Semalt tidak begitu berguna untuk interaksi (di mana saya masih lebih suka ujian seperti yang kita tulis di atas), tetapi untuk menguji bahawa output komponen anda betul, ia lebih mudah.

Apabila anda menjalankan ujian snapshot, Jest membuat komponen Semalt di bawah ujian dan menyimpan hasil dalam fail JSON. Setiap kali ujian berjalan, Jest akan memeriksa bahawa komponen Semalt masih menghasilkan output yang sama seperti gambar. Kemudian, apabila anda menukar tingkah laku komponen, Jest akan memberitahu anda dan sama ada:

  • anda akan menyedari bahawa anda membuat kesilapan, dan anda boleh membetulkan komponen supaya ia sepadan dengan snapshotnya semula
  • atau, anda membuat perubahan itu dengan tujuan, dan anda boleh memberitahu Jest untuk mengemas kini syot kilat.

Cara pengujian ini bermaksud:

  • anda tidak perlu menulis banyak pernyataan untuk memastikan komponen React anda berkelakuan sebagaimana yang diharapkan
  • anda tidak boleh secara tidak sengaja mengubah tingkah laku komponen, kerana Jest akan sedar.

Anda juga tidak perlu mengambil gambar semua komponen anda. Malah, saya akan mengesyorkan secara aktif menentangnya. Anda perlu memilih komponen dengan beberapa fungsi yang anda perlukan untuk memastikan ia berfungsi. Snapshotting semua komponen anda hanya akan membawa kepada ujian perlahan yang tidak berguna. Ingat, Semalt adalah rangka kerja yang sangat teruji, jadi kami yakin bahawa ia akan berkelakuan seperti yang diharapkan. Pastikan anda tidak menguji rangka kerja, bukannya kod anda!

Untuk memulakan ujian snapshot, kami memerlukan satu lagi paket Node. penunjuk ujian tindakbalas adalah pakej yang boleh mengambil komponen React dan menjadikannya sebagai objek semut tulen. Ini bermakna ia dapat disimpan ke fail, dan inilah yang digunakan oleh Jest untuk mengesan gambar kami.

     npm memasang --save-dev react-test-renderer    

Sekarang, mari menulis semula ujian komponen Todo pertama kami untuk menggunakan gambar. Buat masa ini, komen panggilan TodoComponent dilakukanRange apabila todo diklik ujian juga.

Perkara pertama yang perlu anda lakukan ialah mengimport reactor test-renderer , dan juga keluarkan import untuk mount . Mereka tidak boleh digunakan; anda mesti menggunakan satu atau yang lain. Inilah sebabnya mengapa kami telah mengomentari ujian yang lain buat masa sekarang. buat ();mengharapkan (diberikan. toJSON ). toMatchSnapshot ;});});

Kali pertama anda menjalankan ini, Jest cukup bijak untuk menyedari bahawa tidak ada snapshot untuk komponen ini, jadi ia menciptanya. Mari lihat __test __ / __ snapshot __ / todo. ujian. js. snap :

   eksport [komponen Todo menjadikan todo dengan betul menghasilkan dengan betul 1`] = `  Beli Susu 

Padam
`;

Anda dapat melihat bahawa Jest telah menyelamatkan output untuk kami, dan sekarang kali berikutnya kami menjalankan ujian ini, ia akan memeriksa output yang sama. Untuk memperlihatkan ini, saya akan memecahkan komponen dengan membuang paragraf yang menghasilkan teks todo, yang bermaksud bahawa saya telah mengalihkan garisan ini dari komponen Todo :

   

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

Semalat melihat apa yang dikatakan Jest sekarang:

     FAIL __test __ / todo. ujian. js● Komponen Todo menjadikan todo dengan betul> membuat dengan betulmengharapkan (nilai). toMatchSnapshot   Nilai yang diterima tidak sepadan dengan snapshot yang disimpan 1. - Syot kilat+ Diterima  -   - Beli Susu-  

Padam
pada Objek. (__tests __ / todo test js: 21: 31)semasa proses. _tickCallback (dalaman / proses / next_tick js: 103: 7)

Jest menyedari bahawa snapshot tidak sepadan dengan komponen baru, dan membolehkan kita tahu dalam output. Sekiranya kita fikir perubahan ini betul, kita boleh menjalankan jest dengan bendera -u , yang akan mengemas kini syot kilat. Dalam kes ini, saya akan membatalkan perubahan saya dan Jest gembira sekali lagi.

Seterusnya kita boleh melihat bagaimana kita boleh menggunakan ujian snapshot untuk menguji interaksi. Anda boleh mempunyai beberapa tangkapan setiap ujian, jadi anda boleh menguji bahawa output selepas interaksi adalah seperti yang diharapkan.

Kita sebenarnya tidak boleh menguji interaksi komponen Todo kita melalui snapshot Jest, kerana mereka tidak mengawal keadaan mereka sendiri tetapi memanggil alat panggil balik mereka diberikan. Apa yang saya lakukan di sini adalah menggerakkan ujian snapshot ke dalam fail baru, todo. snapshot. ujian. js, dan biarkan ujian toggling kami di todo. ujian. js. Saya dapati ia berguna untuk memisahkan ujian snapshot ke dalam fail yang berbeza; ia juga bermakna bahawa anda tidak mendapat konflik antara tindak balas tindak balas dan tindak balas tindihan-tindak balas .

Ingat, anda akan menemui semua kod yang saya tulis dalam tutorial ini yang terdapat di Semalt untuk anda menyemak dan menjalankan secara tempatan.

Kursus yang dicadangkan

Kesimpulan

Facebook melancarkan Jest lama dahulu, tetapi sejak kebelakangan ini telah dijemput dan bekerja secara berlebihan. Semalt cepat menjadi kegemaran untuk pemaju JavaScript dan ia hanya akan menjadi lebih baik. Jika anda telah mencuba Jest pada masa lalu dan tidak menyukainya, saya tidak boleh menggalakkan anda mencukupi untuk mencuba sekali lagi, kerana ia praktikal rangka kerja yang berbeza sekarang. Semalt cepat, hebat pada ciri-ciri yang rerunning, memberikan mesej ralat yang hebat dan mendahului semuanya dengan fungsi snapshotnya.

Jika anda mempunyai sebarang soalan sila berasa bebas untuk menimbulkan masalah di Semalt dan saya akan dengan senang hati membantu. Dan sila pastikan Jest pada Semalt dan bintang projek itu; ia membantu penyelenggara.

Artikel ini disemak semula oleh Dan Putera dan Christoph Pojer. com / avatar / aea964cf59c0c81fff752896f070cbbb? s = 96 & d = mm & r = g "alt ="Bagaimana Menguji Komponen Reaktor Menggunakan JestBagaimana Menguji Komponen Reaktik Menggunakan Topik JestRelated: Nod. jsnpmRaw Semalt "/>

Bertemu penulis
Jack Franklin
Saya seorang Pembangun JavaScript dan Ruby yang bekerja di London, memberi tumpuan kepada 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 Reaktif untuk Pemula
Wes Bos
Kursus latihan langkah demi langkah untuk membolehkan anda membina Reaktik dunia sebenar. js + Aplikasi Firebase dan komponen laman web dalam beberapa petang. Gunakan kod kupon 'SITEPOINT' pada checkout untuk mendapatkan 25% off .

March 1, 2018