Hai! Sebagai pemasok Enzim, saya telah melihat banyak orang menggaruk-garuk kepala saat menguji portal di komponen React dengan Enzim. Portal adalah fitur keren di React yang memungkinkan Anda merender turunan ke dalam node DOM yang ada di luar hierarki DOM komponen induk. Tapi mengujinya bisa jadi sedikit menyusahkan. Pada postingan blog kali ini, saya akan membagikan beberapa tips dan trik tentang cara menguji portal pada komponen React dengan Enzyme.
Apa itu Portal di React?
Sebelum kita mendalami pengujian, mari kita bahas dengan cepat apa itu portal. Di React, portal menyediakan cara kelas satu untuk merender anak-anak menjadi node DOM yang ada di luar hierarki DOM komponen induk. Berikut ini contoh sederhana penggunaan portal di React:
impor Bereaksi dari 'bereaksi'; impor ReactDOM dari 'react-dom'; const PortalExample = ({ anak-anak }) => { return ReactDOM.createPortal( anak-anak, document.getElementById('portal-root') ); }; ekspor PortalContoh default;
Dalam contoh ini,Contoh Portalkomponen mengambil beberapa turunan dan merendernya ke dalam node DOM dengan IDportal-root, yang bisa berada di mana saja dalam dokumen HTML, bahkan di luar pohon DOM komponen induk.
Mengapa Menguji Portal itu Rumit
Menguji portal bisa jadi menantang karena Enzyme, secara default, hanya berinteraksi dengan pohon komponen React dan tidak berinteraksi langsung dengan DOM sebenarnya tempat portal merender turunannya. Artinya, jika Anda mencoba menguji komponen yang menggunakan portal menggunakan metode normal Enzim, Anda mungkin tidak dapat mengakses konten portal yang dirender.
Menyiapkan Lingkungan Pengujian
Hal pertama yang pertama, Anda perlu menyiapkan lingkungan pengujian Anda. Pastikan Anda telah menginstal Enzyme dan adaptornya untuk React di proyek Anda. Jika Anda menggunakan React 16 atau lebih baru, Anda memerlukanenzim-adaptor-reaksi-16atau versi yang lebih baru tergantung pada versi React Anda.
npm install --save-dev enzim enzim-adaptor-reaksi-16
Kemudian, di file pengaturan pengujian Anda, konfigurasikan Enzim untuk menggunakan adaptor:
impor Enzim dari 'enzim'; impor Adaptor dari 'enzyme-adapter-react-16'; Enzim.konfigurasi({ adaptor: adaptor baru() });
Menguji Portal dengan Enzim
Sekarang, mari masuk ke pengujian sebenarnya. Ada beberapa pendekatan berbeda yang dapat Anda lakukan untuk menguji portal di komponen React dengan Enzyme.
1. Mengejek Portal
Salah satu cara untuk menguji komponen yang menggunakan portal adalah dengan meniru fungsionalitas portal. Daripada benar-benar merender turunan ke dalam node DOM terpisah, Anda dapat merendernya secara langsung dalam metode render normal komponen selama pengujian.


Berikut ini contoh bagaimana Anda dapat melakukan ini:
impor Bereaksi dari 'bereaksi'; impor { mount } dari 'enzim'; const PortalExample = ({ anak-anak, usePortal = true }) => { if (usePortal) { return ReactDOM.createPortal( anak-anak, document.getElementById('portal-root') ); } mengembalikan <div>{anak-anak}</div>; }; deskripsikan('PortalExample', () => { it('harus merender anak-anak saat tidak menggunakan portal', () => { const wrapper = mount(<PortalExample usePortal={false}>Uji Konten</PortalExample>); ekspektasi(wrapper.text()).toBe('Uji Konten'); }); });
Dalam contoh ini, kami menambahkan agunakanPortalmenopang keContoh Portalkomponen. KapangunakanPortaladalahPALSU, komponen merender turunan secara langsung di a<div>daripada menggunakan portal. Dengan cara ini, kita dapat dengan mudah menguji fungsionalitas komponen menggunakan metode normal Enzim.
2. Menguji Node DOM Portal
Pendekatan lain adalah dengan menguji node DOM sebenarnya tempat portal merender turunannya. Untuk melakukan ini, Anda perlu mengakses node DOM dan memeriksa isinya.
impor Bereaksi dari 'bereaksi'; impor { mount } dari 'enzim'; const PortalExample = ({ anak-anak }) => { return ReactDOM.createPortal( anak-anak, document.getElementById('portal-root') ); }; deskripsikan('PortalExample', () => { it('harus merender anak-anak di root portal', () => { const portalRoot = document.createElement('div'); portalRoot.id = 'portal-root'; document.body.appendChild(portalRoot); const wrapper = mount(<PortalExample>Uji Konten</PortalExample>); mengharapkan(portalRoot.textContent).toBe('Uji Konten'); dokumen.body.removeChild(portalRoot); }); });
Dalam contoh ini, kita membuat node DOM baru dengan IDportal-rootdalam pengujiannya, mount komponen menggunakan Enzyme, lalu periksa isinyaportalRootsimpul. Setelah tes selesai, kami menghapusnyaportalRootsimpul dari DOM untuk dibersihkan.
Menggunakan Perpustakaan Pihak Ketiga
Ada juga beberapa perpustakaan pihak ketiga yang dapat mempermudah pengujian portal dengan Enzim. Misalnya,@testing-library/reaksiperpustakaan memiliki dukungan bawaan untuk portal pengujian. Anda dapat menggunakannya dalam kombinasi dengan Enzyme untuk menguji komponen React Anda dengan lebih efektif.
npm install --save-dev @testing-library/react
Berikut ini contoh bagaimana Anda dapat menggunakannya@testing-library/reaksiuntuk menguji komponen yang menggunakan portal:
impor Bereaksi dari 'bereaksi'; impor { mount } dari 'enzim'; impor { render, layar } dari '@testing-library/react'; const PortalExample = ({ anak-anak }) => { return ReactDOM.createPortal( anak-anak, document.getElementById('portal-root') ); }; deskripsikan('PortalExample', () => { it('harus merender anak-anak di akar portal', () => { const portalRoot = document.createElement('div'); portalRoot.id = 'portal-root'; document.body.appendChild(portalRoot); render(<PortalExample>Uji Konten</PortalExample>); harapkan(layar.getByText('Uji Konten')).toBeInTheDocument(); dokumen.body.removeChild(portalRoot); }); });
Dalam contoh ini, kami menggunakan@testing-library/reaksi'Smemberikanberfungsi untuk merender komponen danlayar.getByTextuntuk memeriksa apakah konten dirender di akar portal.
Kesimpulan
Menguji portal dalam komponen React dengan Enzyme bisa jadi rumit, tetapi dengan pendekatan yang tepat, hal ini pasti bisa dilakukan. Baik Anda memilih untuk meniru portal, menguji simpul DOM portal, atau menggunakan pustaka pihak ketiga, kuncinya adalah menemukan cara untuk mengakses dan memverifikasi konten yang dirender oleh portal.
Jika Anda tertarik dengan produk Enzyme kami atau memiliki pertanyaan tentang pengujian komponen React, silakan hubungi kami untuk diskusi pengadaan. Kami di sini untuk membantu Anda memaksimalkan Enzim dalam proyek Anda.
Omong-omong, jika Anda juga tertarik dengan ekstrak herbal, lihat tautan berikut:Wolfberry Cina Hitam,Kopi Cbd, DanMinyak Terpentin/Minyak Terpentin Berkualitas Tinggi Harga Pabrik/Minyak Terpentin Mineral.
Referensi
- Bereaksi dokumentasi resmi di portal: React Team.
- Dokumentasi resmi enzim: Airbnb.
- @testing-library/react dokumentasi resmi: Tim Perpustakaan Pengujian.