Sebagai pembangun dengan latar belakang JavaScript, saya telah menghabiskan masa yang agak lama untuk menulis ujian dengan Jest. Dalam projek saya, gimme_readme, saya terpaksa bermain-main dengan beberapa ciri percubaan dengan Node dan Jest kerana modul npm pihak ke-3 yang saya gunakan. Saya dapat mencari benang Stack Overflow yang hebat yang mengajar saya cara menjalankan ujian Jest apabila menggunakan sintaks ES6. Tanpa kebijaksanaan individu-individu pintar ini, katakanlah saya akan berjuang! Walau bagaimanapun, berbekalkan pengetahuan tentang cara menggunakan ciri percubaan Jest ini, saya dapat:
Kod untuk saluran paip CI yang saya nyatakan di atas boleh didapati di sini, dan ditetapkan untuk dijalankan apabila tolakan dibuat ke mana-mana cawangan atau apabila terdapat permintaan tarik. Dengan cara ini, sesiapa sahaja yang cuba menyumbang kepada repositori saya akan mengetahui sama ada kod yang mereka sumbangkan adalah "cukup baik untuk digunakan" berkaitan dengan menggabungkannya ke dalam cawangan utama saya - sekurang-kurangnya setakat ujian automatik.
Sesiapa pun, itu sudah cukup tentang kerja yang telah saya lakukan untuk repositori saya ketika dahulu.
Minggu ini, saya memutuskan untuk menyahut cabaran menulis beberapa ujian untuk projek Python yang ditulis oleh rakan saya Aryan Khurana. Projek Aryan ialah alat baris perintah yang dipanggil github-echo yang memberikan pandangan tentang repositori GitHub. Menggunakan bahasa yang tidak dikenali, rangka kerja ujian yang saya tidak pernah gunakan (PyTest) pastinya berada di luar zon selesa saya, tetapi saya sangat menghargai Aryan sudi menunjukkan talinya kepada saya (terima kasih Aryan!).
Apabila saya mula menjalankan ujian untuk repositori Aryan, saya serta-merta terharu melihat betapa berbezanya ujian tersebut. Walaupun Jest telah menjadi wilayah yang biasa bagi saya, pytest Python berasa sangat asing. Namun begitu, dengan bimbingan Aryan dan beberapa keazaman, saya mula memahami ciri uniknya.
Mari kita pecahkan perkara yang saya temui dalam kes ujian mereka:
Ujian Berparameter: Salah satu perkara pertama yang menarik perhatian saya ialah penghias @pytest.mark.parametrize. Ini serupa dengan ujian Jest.each, tetapi dengan sintaks yang lebih bersih:
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
Pengurus Konteks: Daripada jangkaan Jest().toThrow(), Python menggunakan pengurus konteks dengan pytest.raises:
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
Sistem Fail Sementara: Ujian menggunakan lekapan tmp_path pytest untuk operasi sistem fail, yang jauh lebih bersih daripada menyediakan sistem fail olok-olok dalam Jest:
with pytest.raises(typer.BadParameter, match='Invalid GitHub repository URL'): check_cli_arguments(invalid_url, 'gemini', 0.5, Path('output.md'))
Pengalaman bekerja dengan rangka kerja ujian JavaScript dan Python telah meluaskan perspektif saya tentang ujian perisian. Walaupun Jest berasa seperti wilayah rumah, saya telah menghargai ciri hebat pytest seperti ujian dan lekapan berparameter. Sama ada anda menulis ujian JavaScript atau Python, matlamat akhir tetap sama: menyampaikan kod yang boleh dipercayai dan diuji dengan baik kepada pengguna anda.
Atas ialah kandungan terperinci # Dari Jest ke Pytest: Perjalanan Pembangun JavaScript ke Ujian Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!