Rumah >hujung hadapan web >tutorial js >Panduan untuk Menguji Komponen Reaksi
Perlu diingat, saya hanya bercakap tentang ujian unit, yang merupakan ujian khas. .
Dengan ujian unit, saya berminat dengan dua perkara: maklum balas yang cepat dan leher. Dengan ini, saya dapat melangkah melalui perubahan dengan keyakinan dan kualiti kod yang tinggi. Ini memberi anda tahap jaminan bahawa komponen React anda tidak akan mendarat mati pada penyemak imbas. Mampu mendapatkan maklum balas yang baik pada kadar yang cepat memberikan anda kelebihan daya saing - yang anda ingin simpan dalam pembangunan perisian dunia yang tangkas hari ini.Untuk demo, mari kita buat senarai kera yang hebat, yang boleh ditapis melalui kotak semak. Anda boleh mencari keseluruhan codebase di GitHub. Demi keringkasan, saya akan menunjukkan hanya sampel kod yang menarik. Artikel ini menganggap tahap pengetahuan pengetahuan dengan komponen React.
Jika anda pergi memuat turun dan menjalankan kod sampel demo, anda akan melihat halaman seperti ini:
Dalam React, pendekatan yang baik adalah untuk memulakan dengan hierarki komponen. Prinsip tanggungjawab tunggal datang ke fikiran ketika membina setiap komponen individu. React Components Gunakan komposisi objek dan hubungan.
Untuk senarai kera yang hebat, sebagai contoh, saya mempunyai pendekatan ini:
FilterableGreatApeList |_ GreatApeSearchBar |_ GreatApeList |_ GreatApeRow
Lihatlah bagaimana senarai kera yang hebat mempunyai banyak baris kera yang hebat dengan data. Komponen React menggunakan model data komposisi ini, dan ia juga boleh diuji.
Dalam komponen React, elakkan menggunakan warisan untuk membina komponen yang boleh diguna semula. Jika anda datang dari latar belakang pengaturcaraan berorientasikan objek klasik, ingatlah ini. Komponen React tidak tahu anak -anak mereka lebih awal daripada masa. Ujian komponen yang turun dari rantai nenek moyang yang panjang boleh menjadi mimpi ngeri.
Saya akan membiarkan anda meneroka penapis yang boleh ditapis sendiri. Ia adalah komponen bertindak balas dengan dua komponen berasingan yang menarik di sini. Jangan ragu untuk meneroka ujian unit yang datang dengannya.
Untuk membina Greatapesearchbar yang boleh diuji, misalnya, lakukan ini:
<span>class GreatApeSearchBar extends Component { </span> <span>constructor(props) { </span> <span>super(props); </span> <span>this.handleShowExtantOnlyChange = this.handleShowExtantOnlyChange.bind(this); </span> <span>} </span> <span>handleShowExtantOnlyChange(e) { </span> <span>this.props.onShowExtantOnlyInput(e.target.checked); </span> <span>} </span> <span>render() { </span> <span>return( </span> <span><span><span><form</span>></span> </span><span> <span><span><input</span> </span></span><span> <span>id<span>="GreatApeSearchBar-showExtantOnly"</span> </span></span><span> <span>type<span>="checkbox"</span> </span></span><span> <span>checked<span>={this.props.showExtantOnly}</span> </span></span><span> <span>onChange<span>={this.handleShowExtantOnlyChange}</span> </span></span><span> <span>/></span> </span><span> </span><span> <span><span><label</span> htmlFor<span>="GreatApeSearchBar-showExtantOnly"</span>></span>Only show extant species<span><span></label</span>></span> </span><span> <span><span></form</span>></span> </span> <span>); </span> <span>} </span><span>} </span>
Komponen ini mempunyai kotak semak dengan label dan wayar sehingga acara klik. Pendekatan ini mungkin sudah terlalu biasa dengan anda, yang merupakan perkara yang sangat baik.
Perhatikan bahawa dengan reaksi, komponen yang boleh diuji datang secara percuma, terus dari kotak. Tidak ada yang istimewa di sini - pengendali acara, JSX, dan kaedah render.
Komponen React Next dalam hierarki adalah The Greatapelist, dan ia kelihatan seperti ini:
<span>class GreatApeList extends Component { </span> <span>render() { </span> <span>let rows = []; </span> <span>this.props.apes.forEach((ape) => { </span> <span>if (!this.props.showExtantOnly) { </span> rows<span>.push(<span><span><GreatApeRow</span> key<span>={ape.name}</span> ape<span>={ape}</span> /></span>); </span> <span>return; </span> <span>} </span> <span>if (ape.isExtant) { </span> rows<span>.push(<span><span><GreatApeRow</span> key<span>={ape.name}</span> ape<span>={ape}</span> /></span>); </span> <span>} </span> <span>}); </span> <span>return ( </span> <span><span><span><div</span>></span> </span><span> {rows} </span><span> <span><span></div</span>></span> </span> <span>); </span> <span>} </span><span>} </span>
Ia adalah komponen React yang mempunyai komponen Greataperow dan ia menggunakan komposisi objek. Ini adalah model komposisi yang paling kuat di tempat kerja. Perhatikan kekurangan warisan apabila anda membina komponen yang boleh diguna semula tetapi boleh diuji.
Dalam pengaturcaraan, komposisi objek adalah corak reka bentuk yang membolehkan unsur-unsur yang didorong data. Untuk memikirkannya dengan cara yang lain, seorang ahli greatapel mempunyai banyak objek yang hebat. Ini hubungan ini antara komponen UI yang memacu reka bentuk. Komponen React mempunyai minda ini dibina. Cara ini melihat elemen UI membolehkan anda menulis beberapa ujian unit yang bagus.
di sini, anda menyemak bendera this.props.showextantOnly yang berasal dari kotak semak. Harta showextantonly ini ditetapkan melalui pengendali acara di GreatapesearchBar.
Untuk ujian unit, bagaimana anda menguji komponen reaksi ujian yang bergantung kepada komponen lain? Bagaimana dengan komponen yang saling berkaitan? Ini adalah soalan -soalan yang hebat untuk diingat ketika kita dapat menguji tidak lama lagi. Komponen React mungkin mempunyai rahsia yang boleh dibuka.
Buat masa ini, mari kita lihat The Greataperow, yang menempatkan data kera yang hebat:
<span>class GreatApeRow extends Component { </span> <span>render() { </span> <span>return ( </span> <span><span><span><div</span>></span> </span><span> <span><span><img</span> </span></span><span> <span>className<span>="GreatApeRow-image"</span> </span></span><span> <span>src<span>={this.props.ape.image}</span> </span></span><span> <span>alt<span>={this.props.ape.name}</span> </span></span><span> <span>/></span> </span><span> </span><span> <span><span><p</span> className<span>="GreatApeRow-detail"</span>></span> </span><span> <span><span><b</span>></span>Species:<span><span></b</span>></span> {this.props.ape.name} </span><span> <span><span></p</span>></span> </span><span> </span><span> <span><span><p</span> className<span>="GreatApeRow-detail"</span>></span> </span><span> <span><span><b</span>></span>Age:<span><span></b</span>></span> {this.props.ape.age} </span><span> <span><span></p</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span> <span>} </span><span>} </span>
Dengan komponen React, ia praktikal untuk mengasingkan setiap elemen UI dengan fokus laser pada satu kebimbangan. Ini mempunyai kelebihan utama ketika datang ke ujian unit. Selagi anda berpegang pada corak reka bentuk ini, anda akan mendapati ia lancar untuk menulis ujian unit.
mari kita rekap kebimbangan terbesar kita ketika datang untuk menguji komponen React. Bagaimanakah saya menguji satu komponen tunggal secara berasingan? Nah, ternyata, ada utiliti bagus yang membolehkan anda melakukannya.
Penggerak cetek dalam React membolehkan anda membuat komponen satu tahap dalam. Dari ini, anda boleh menegaskan fakta tentang apa yang dilakukan oleh kaedah render. Apa yang luar biasa ialah ia tidak memerlukan dom.
menggunakan ES6, anda menggunakannya seperti ini:
FilterableGreatApeList |_ GreatApeSearchBar |_ GreatApeList |_ GreatApeRow
Agar ujian unit berjalan pantas, anda memerlukan cara untuk menguji komponen secara berasingan. Dengan cara ini, anda boleh memberi tumpuan kepada satu masalah, mengujinya, dan beralih kepada kebimbangan seterusnya. Ini menjadi memberi kuasa apabila penyelesaiannya berkembang dan anda dapat refactor mengikut kehendak - tinggal dekat dengan kod, membuat perubahan pesat, dan mendapat jaminan ia akan berfungsi dalam penyemak imbas.
Satu kelebihan pendekatan ini ialah anda berfikir lebih baik mengenai kod tersebut. Ini menghasilkan penyelesaian terbaik yang berkaitan dengan masalah yang dihadapi. Saya dapati ia membebaskan apabila anda tidak dirantai ke satu ton gangguan. Otak manusia melakukan pekerjaan yang mengerikan dalam menangani lebih daripada satu masalah pada satu masa.
satu -satunya soalan yang tersisa adalah, sejauh mana utiliti kecil ini membawa kita dengan komponen reaksi?
Lihatlah Greatapelist, sebagai contoh. Apakah kebimbangan utama yang anda cuba selesaikan? Komponen ini menunjukkan kepada anda senarai kera yang hebat berdasarkan penapis.
Ujian unit yang berkesan adalah lulus dalam senarai dan periksa fakta tentang apa yang dilakukan oleh komponen React ini. Kami mahu memastikan ia menapis kera besar berdasarkan bendera.
satu pendekatan adalah melakukan ini:
<span>class GreatApeSearchBar extends Component { </span> <span>constructor(props) { </span> <span>super(props); </span> <span>this.handleShowExtantOnlyChange = this.handleShowExtantOnlyChange.bind(this); </span> <span>} </span> <span>handleShowExtantOnlyChange(e) { </span> <span>this.props.onShowExtantOnlyInput(e.target.checked); </span> <span>} </span> <span>render() { </span> <span>return( </span> <span><span><span><form</span>></span> </span><span> <span><span><input</span> </span></span><span> <span>id<span>="GreatApeSearchBar-showExtantOnly"</span> </span></span><span> <span>type<span>="checkbox"</span> </span></span><span> <span>checked<span>={this.props.showExtantOnly}</span> </span></span><span> <span>onChange<span>={this.handleShowExtantOnlyChange}</span> </span></span><span> <span>/></span> </span><span> </span><span> <span><span><label</span> htmlFor<span>="GreatApeSearchBar-showExtantOnly"</span>></span>Only show extant species<span><span></label</span>></span> </span><span> <span><span></form</span>></span> </span> <span>); </span> <span>} </span><span>} </span>
Perhatikan bahawa saya menguji komponen React menggunakan jest. Untuk lebih lanjut mengenai ini, lihat "Cara Menguji Komponen Reaksi Menggunakan Jest".
Dalam JSX, lihatlah showextantonly = {true}. Sintaks JSX membolehkan anda menetapkan keadaan ke komponen React anda. Ini membuka banyak cara untuk komponen ujian unit yang diberikan keadaan tertentu. JSX memahami jenis JavaScript asas, jadi bendera sebenar ditetapkan sebagai boolean.
dengan senarai keluar dari jalan, bagaimana pula dengan GreatapesearchBar? Ia mempunyai pengendali acara ini dalam harta Onchange yang mungkin menarik.
satu ujian unit yang baik adalah melakukan ini:
<span>class GreatApeList extends Component { </span> <span>render() { </span> <span>let rows = []; </span> <span>this.props.apes.forEach((ape) => { </span> <span>if (!this.props.showExtantOnly) { </span> rows<span>.push(<span><span><GreatApeRow</span> key<span>={ape.name}</span> ape<span>={ape}</span> /></span>); </span> <span>return; </span> <span>} </span> <span>if (ape.isExtant) { </span> rows<span>.push(<span><span><GreatApeRow</span> key<span>={ape.name}</span> ape<span>={ape}</span> /></span>); </span> <span>} </span> <span>}); </span> <span>return ( </span> <span><span><span><div</span>></span> </span><span> {rows} </span><span> <span><span></div</span>></span> </span> <span>); </span> <span>} </span><span>} </span>
Untuk mengendalikan dan menguji peristiwa, anda menggunakan kaedah rendering cetek yang sama. Kaedah GetRenderOutput berguna untuk mengikat fungsi panggil balik kepada komponen dengan peristiwa. Di sini, harta onshowextantonLyInput akan diberikan fungsi onchange callback.
Pada ujian unit yang lebih remeh, bagaimana dengan komponen Greataperow React? Ia memaparkan maklumat APE yang hebat menggunakan tag HTML. Ternyata, anda boleh menggunakan penghantar cetek untuk menguji komponen ini juga.
Sebagai contoh, mari kita pastikan kita membuat imej:
<span>class GreatApeRow extends Component { </span> <span>render() { </span> <span>return ( </span> <span><span><span><div</span>></span> </span><span> <span><span><img</span> </span></span><span> <span>className<span>="GreatApeRow-image"</span> </span></span><span> <span>src<span>={this.props.ape.image}</span> </span></span><span> <span>alt<span>={this.props.ape.name}</span> </span></span><span> <span>/></span> </span><span> </span><span> <span><span><p</span> className<span>="GreatApeRow-detail"</span>></span> </span><span> <span><span><b</span>></span>Species:<span><span></b</span>></span> {this.props.ape.name} </span><span> <span><span></p</span>></span> </span><span> </span><span> <span><span><p</span> className<span>="GreatApeRow-detail"</span>></span> </span><span> <span><span><b</span>></span>Age:<span><span></b</span>></span> {this.props.ape.age} </span><span> <span><span></p</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span> <span>} </span><span>} </span>
Dengan komponen React, semuanya berpusat di sekitar kaedah render. Ini menjadikannya agak intuitif untuk mengetahui dengan tepat apa yang anda perlukan untuk menguji. Penggerak cetek menjadikannya supaya anda dapat memberi tumpuan kepada komponen tunggal sambil menghilangkan bunyi bising.
Seperti yang ditunjukkan, komponen React sangat boleh diuji. Tidak ada alasan untuk melepaskan ujian unit yang baik untuk komponen anda.
Perkara yang baik ialah JSX berfungsi untuk anda dalam setiap ujian individu, bukan terhadap anda. Dengan JSX, anda boleh lulus dalam booleans, panggilan balik, atau apa sahaja yang anda perlukan. Ingatlah ini semasa anda menceburkan diri ke dalam komponen reaksi ujian unit sendiri.
Utiliti Ujian Renderer Cetek memberikan anda semua yang anda perlukan untuk ujian unit yang baik. Ia hanya menjadikan satu tahap mendalam dan membolehkan anda menguji secara berasingan. Anda tidak peduli dengan mana -mana anak sewenang -wenang dalam hierarki yang mungkin memecahkan ujian unit anda.
Dengan alat jest, saya suka bagaimana ia memberi anda maklum balas hanya pada fail tertentu yang anda ubah. Ini memendekkan gelung maklum balas dan menambah fokus laser. Saya harap anda melihat betapa berharganya ini apabila anda menangani beberapa masalah yang sukar.
Menguji interaksi pengguna dalam komponen React melibatkan mensimulasikan tindakan pengguna dan memeriksa bahawa komponen bertindak balas dengan betul. Ini boleh dilakukan menggunakan fungsi simulasi yang disediakan oleh enzim. Sebagai contoh, anda boleh mensimulasikan peristiwa klik pada butang dan kemudian periksa bahawa keadaan atau prop komponen telah berubah seperti yang diharapkan. Ia juga penting untuk menguji bahawa komponen anda mengendalikan input pengguna dengan betul, contohnya dengan menyemak bahawa borang mengemukakan data yang betul apabila pengguna mengisi dan mengklik butang hantar. boleh diakses?
Atas ialah kandungan terperinci Panduan untuk Menguji Komponen Reaksi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!