Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Testing
Code

Pengaturcaraan Dengan Yii2: Ujian Automatik Dengan Codeception

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

Malay (Melayu) translation by Meyria (you can also view the original English article)

Final product image
What You'll Be Creating

Jika anda bertanya, "Apa Yii?" lihat tutorial awal saya, Pengenalan kepada Rangka Kerja Yii, yang mengkaji manfaat Yii dan merangkumi gambaran keseluruhan mengenai apa yang baru dalam Yii 2.0, dikeluarkan pada bulan Oktober 2014.

Dalam Pengaturcaraan ini Dengan siri Yii2, saya membimbing para pembaca menggunakan Rangka Kerja Yii2 untuk PHP. Dalam tutorial ini, saya akan meneroka ujian automatik menggunakan Codeception, yang disepadukan dengan rangka kerja pembangunan Yii2.

Diakui, pengalaman saya menulis ujian dengan kod saya adalah terhad. Saya sering menjadi sebahagian daripada projek solo atau kecil dengan sumber yang terhad. Semasa masa saya di Microsoft, kami mempunyai pasukan ujian berbeza yang melakukan ini. Tapi terus terang, ini mungkin tipikal juga kepada anda, bukan? Pengaturcara suka kod, mereka tidak menulis ujian-sekurang-kurangnya pengaturcara sekolah lama tidak.

Codeception adalah sebuah perpustakaan inovatif yang secara literal bertujuan untuk membuat ujian menulis menyeronokkan dan mudah. Dan, saya katakan mereka berjaya mencapai tahap yang munasabah. Semasa saya mencelupkan kaki saya ke dalam air "Lake Codeception", ia adalah lebih mudah dan menyeronokkan. Bagaimanapun, ketika saya mulai lebih mendalam, saya berlari ke dalam masalah konfigurasi dengan Yii dan modul khusus yang digunakan dalam siri ini. Terdapat banyak cabaran. Secara keseluruhannya, walaupun, saya kagum dan melihat faedah mempelajari lebih lanjut.

Secara ringkasnya, Codeception dan integrasinya dengan Yii membuatkan saya mahu menulis lebih banyak ujian, yang pertama untuk saya. Saya mengesyaki anda akan mempunyai pengalaman yang serupa.

Peringatan sedikit sebelum kita bermula, saya mengambil bahagian dalam benang komen di bawah. Saya sangat berminat jika anda mempunyai pemikiran tambahan atau ingin mencadangkan topik untuk tutorial masa depan. Jika anda mempunyai soalan atau cadangan topik, sila pos di bawah. Anda juga boleh menghubungi saya di Twitter @reifman secara langsung.

Bermula

Memasang Codeception

Untuk membimbing saya, saya menggunakan dokumentasi Persediaan Pengujian Persekitaran Yii. Saya bermula dengan pemasangan codeception global supaya saya boleh menggunakannya dari mana-mana projek.

Anda juga perlu menghendaki codeception/specify:

Dan codeception/verify:

Seterusnya, ia membantu untuk menyediakan alias untuk codecept menggunakan direktori komposer global anda:

Ini menetapkan alias:

Yii juga memerlukan anda memasang Faker, yang menghasilkan data ujian palsu untuk aplikasi anda:

Menyediakan Codeception Dengan Aplikasi Anda

Codecept bootstrap memulakan codeception untuk aplikasi Yii anda, membuat pelbagai fail konfigurasi untuk membina dan menjalankan ujian terhadap permohonan anda. Kami menggunakan aplikasi Hello dari siri ini untuk tutorial ini. Lihat pautan GitHub pada halaman ini untuk mendapatkan kod.

Atas sebab tertentu, saya juga berakhir dengan direktori pengujian pendua di halo/ujian; hanya memadam hello/test/functional, hello/tests/acceptance, dan hello/tests/unit membersihkan perkara. Semua ujian hidup di hello/tests/codeception /*.

Jenis-jenis Ujian Berbeza

Codeception ditumpu kepada tiga jenis ujian:

  1. Ujian unit mengesahkan bahawa unit khusus bekerja, seperti ujian menyeluruh terhadap semua kaedah model anda.
  2. Ujian fungsional mengesahkan senario aplikasi biasa seolah-olah seorang pengguna bertindak keluar, tetapi menggunakan emulasi penyemak imbas web.
  3. Ujian penerimaan adalah sama dengan ujian berfungsi tetapi sebenarnya menjalankan ujian melalui pelayar web.

Dan ia menyokong tiga jenis format ujian berbeza untuk kod ujian anda:

  1. Cept: ia adalah satu-satunya fail ujian senario yang paling mudah
  2. Cest: format berorientasikan objek untuk menjalankan beberapa ujian dalam satu fail
  3. Ujian: ujian yang ditulis pada PHPUnit, rangka kerja ujian PHP

Mari kita mulakan dengan contoh ujian penerimaan menggunakan format cept:

Ujian Penerimaan

Kami akan menggunakan contoh ujian Selamat Datang Codeception terlebih dahulu.

Ini menghasilkan ujian/penerimaan/WelcomeCept.php, yang akan kami edit di bawah.

Oleh kerana ujian penerimaan memerlukan penyemak imbas, kita perlu mengedit /tests/acceptance.suite.yml dalam projek kami untuk menyediakan URL pembangunan kami, http:// localhost: 8888/hello:

Sekarang, kita sudah bersedia untuk mengubah suai ujian awal di tests/acceptance/WelcomeCept.php. Aku menulis satu ujian yang memuatkan muka depan untuk memastikan ia berfungsi seperti yang diharapkan.

Ujian codeception mempunyai konsep seorang pelakon, dalam kes ini, $I=baru AcceptanceTester().

Berikut adalah bagaimana ia menerangkan pelakon dalam dokumentasi Codeception:

Kami mempunyai UnitTester, yang melaksanakan fungsi-fungsi dan ujian kod. Kami juga mempunyai FunctionalTester, seorang penguji yang berkelayakan, yang menguji permohonan itu secara keseluruhan, dengan pengetahuan tentang dalamannya. Dan Penerimaan Penerimaan, pengguna yang bekerja dengan aplikasi kami melalui antara muka yang kami sediakan.

Anda boleh komen ujian dengan kod, seperti $I-> wantTo ('melakukan ujian tertentu') atau 'memastikan bahawa PSM yang bekerja'.

Dalam ujian saya, saya ingin melihat $I-> lihat teks untuk 'Tahniah!' dan 'Yii bertenaga':

Berikut adalah halaman utama Hello:

Programming with Yii - The Hello Home Page

Seterusnya, mari lari ujian, codecept run sahaja:

Seperti yang anda dapat lihat, ujian kami berlalu, dan kod untuk mengesahkan fungsi ini agak mudah dibaca dan mudah.

Nota-Nota dalam Ujian Lalai di Yii

Untuk pergi lebih jauh, saya mula menggunakan ujian lalai Yii's. Pada ketika ini, saya berlari ke beberapa isu konfigurasi-kebanyakan disebabkan oleh penggunaan modul yii2-pengguna adat dalam siri ini. Lain-lain adalah disebabkan oleh pepijat yang kecil dengan Yii, yang pasukan telah cepat untuk membalas dan selesaikan apabila dilaporkan GitHub; dalam sesetengah kes, isu-isu yang telah ditetapkan dalam siaran kemudian pokok yii2-asas.

Juga, kerana saya telah mengemas kini pokok asas yii2 untuk siri ini, saya perlu membuat perubahan kecil kepada beberapa ujian lalai.

Berikut adalah contoh output untuk menjalankan ujian penerimaan lalai sebaik sahaja saya membuat beberapa pelarasan kecil:

Ujian Fungsian

Untuk mendapatkan ujian berfungsi untuk bekerja, saya perlu menjalankan contoh pelayan terbina dalam Yii. Saya tidak diketahui tentang komponen ini sampai di Yii Alex Markov mengesahkannya dalam pertukaran GitHub kami.

Saya membuat perubahan kecil kepada ujian berfungsi dalam /ujian/codeception / functional, kebanyakannya untuk mencari rentetan teks saya yang dikemas kini, iaitu "Log masuk tidak sah atau kata laluan" di tempat lalai Yii. Inilah pandangan LoginCept.php:

Pada asasnya, kod mengakses model LoginForm dan menguji pelbagai kaedah menggunakan Yii.

Inilah kod ujian /tests/codeception_pages/LoginPage.php yang dimuatkan (saya juga perlu mengubahnya untuk perubahan yang kami buat kepada siri ini):

Anda boleh melihat bahawa kita sedang pengekodan pelakon untuk fillFields dan klik butang untuk medan Borang Kemaskini kami.

Semasa menyelesaikan masalah integrasi Codeception saya dengan Yii, saya mendapati ia membantu untuk menjalankan ujian ini dalam mod verbose:

Berikut adalah output verbose dari ujian fungsi masuk-dalam MacOS Terminal, PASSED dan FAILED adalah warna berkod merah atau merah jambu dan terbalik untuk keterlihatan:

Secara keseluruhannya, sedikit belajar untuk memulakan dengan Codeception dan kod anda dengan betul. Tetapi hasilnya hebat dan berguna.

Percubaan Unit

Pada asasnya, ujian unit adalah ujian programatik terhadap infrastruktur dan model kami. Sebaik-baiknya, kita akan menulis ujian untuk setiap kaedah dan penggunaan variasi model kami.

Malangnya, saya tidak dapat mendapatkan ujian unit untuk bekerja di dalam pokok kami kerana sama ada pepijat Yii yang kecil lagi yang akan dikeluarkan atau isu konfigurasi antara Codeception dan yii2-pengguna yang kami bersepadu dalam Cara Program Dengan Yii2: Mengintegrasikan Pendaftaran Pengguna.

Saya akan menangani percubaan lagi dalam siri permulaan kami yang tidak menggunakan yii2-pengguna tetapi sebaliknya menggunakan pokok Yii lanjutan pengguna terbina dalam integrasi unit.

Mari kita lihat beberapa contoh dari pokok Yii2-aplikasi-asas.

Ujian E-mel Borang Kenalan

Ujian hello/tests/codeception/unit/models/ContactFormTest.php yang menghantar e-mel melalui perancangan penggunaan model:

Saya tidak berjaya mendapatkan ujian ini untuk lulus kerana bug kecil di Yii yang belum dikemas kini lagi (atau sekurang-kurangnya saya tidak dapat mencari kod yang dikemas kini). Penetapan kod Yii saya adalah menamakan e-mel keluar dengan setem tarikh dan kod di atas sedang mencari nama fail tetap. Oleh itu, ia sentiasa gagal. Walau bagaimanapun, berguna untuk melihat bagaimana ujian programma dapat menggunakan model untuk menghasilkan fail dan kemudian cari fail itu dan mengesahkan kandungannya untuk mengesahkan kod tersebut berfungsi.

Ujian Masuk

Mari lihat hello/test/codeception/unit/models/LoginFormTest.php. Sekali lagi, saya menggunakan yii2-user menjadikannya terlalu sukar untuk diintegrasikan pada masa menulis tutorial ini; Walau bagaimanapun, kita boleh melihat pendekatan konseptual untuk fungsi model pengguna ujian unit.

Di sini testLoginCorrect(), yang kelihatan untuk melihat jika login berjaya dengan kata laluan yang betul:

Ia menggunakan model LoginForm untuk log masuk secara logik pengguna, dan kemudian secara pemprograman dilihat untuk melihat sama ada pengguna semasa Yii kini tidak lagi menjadi tetamu.

Apa yang Akan Datang?

Saya harap anda telah menikmati pembelajaran tentang Codeception dan integrasinya dengan Yii, walaupun terdapat beberapa sekatan jalan yang saya lari. Pemasangan lalai yii2-asas hari ini harus dilakukan dengan lebih baik.

Jika anda ingin membaca lebih lanjut mengenai menentukan masa dan apa yang perlu diuji dan mengapa, saya cadangkan membaca Gambaran Keseluruhan Pengujian Yii. Pastinya lebih banyak untuk belajar tentang Codeception dan menulis ujian yang lebih lengkap.

Tonton tutorial yang akan datang dalam Pemrograman kami Dengan siri Yii2 kerana kami terus menyelam ke dalam pelbagai aspek rangka kerja. Jika anda ingin tahu apabila tutorial Yii2 yang akan datang, ikut saya @reifman di Twitter atau semak halaman pengajar saya.

Anda juga mungkin ingin memeriksa Bangunan Kami Permulaan Dengan siri PHP, yang menggunakan templat maju Yii2 sebagai kami membina aplikasi dunia nyata. Malah, anda boleh mencuba aplikasi permulaan, Perancang Mesyuarat, hari ini.

Pautan Berkaitan

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.