Bagaimana cara mengejek objek dalam ujian Laravel?
Gunakan ejekan untuk kebergantungan tersuai dengan menetapkan jangkaan dengan rekrut (). 2. Gunakan kaedah palsu Laravel () untuk fasad seperti mel, barisan, dan HTTP untuk mengelakkan interaksi sebenar. 3. Gantikan perkhidmatan terikat kontena dengan $ this-> mock () untuk sintaks bersih. 4. Gunakan http :: palsu () dengan corak URL untuk mensimulasikan tindak balas API luaran. 5. Memohon mocks separa dengan makepartial () untuk mengejek kaedah tertentu sahaja. 6. Bersihkan mocks dengan ejekan :: tutup (), walaupun kelas ujian asas Laravel biasanya mengendalikan ini. Lebih suka palsu untuk komponen Laravel dan mengejek untuk perkhidmatan tersuai untuk memastikan ujian kekal cepat, boleh dipercayai, dan terpencil.
Objek mengejek dalam ujian Laravel adalah amalan biasa untuk mengasingkan kod anda dan mengelakkan kesan sampingan seperti panggilan pangkalan data, permintaan API luaran, atau pekerjaan beratur. Laravel menyediakan beberapa cara untuk mengolok -olok objek, terima kasih kepada integrasinya dengan PHPUNIT dan perpustakaan Mockery
yang kuat.

Inilah cara untuk mengolok -olok objek secara berkesan dalam ujian Laravel:
1. Menggunakan Mockery
untuk mengejek kebergantungan
Laravel termasuk ejekan secara lalai, jadi anda boleh membuat mocks kelas atau antara muka dengan mudah.

Gunakan ejekan; Gunakan Illuminate \ Support \ Facades \ http; fungsi awam test_external_api_is_called () { $ mock = mockery :: mock ('App \ Services \ paymentGateway'); $ mock-> harus receive ('caj')-> sekali ()-> andreturn (true); $ this-> instance (paymentgateway :: class, $ mock); // Sekarang jalankan logik ujian anda $ response = $ this-> post ('/pay'); $ respons-> assertOK (); }
? Kaedah
shouldReceive()
menetapkan jangkaan tentang bagaimana mock harus digunakan.
2. Menggunakan palsu dan mengejek fasad Laravel
Untuk fasad Laravel (seperti Mail
, Queue
, Cache
, Http
, dan lain -lain), gunakan fake()
atau spy()
.

Contoh: palsu fasad mel
Gunakan Illuminate \ support \ facades \ mail; fungsi awam test_user_registration_sends_email () { Mel :: palsu (); // melakukan tindakan $ this-> post ('/daftar', [ 'Nama' => 'John Doe', 'e -mel' => 'john@example.com', 'kata laluan' => 'rahsia' ]); // Mesej menegaskan telah dihantar Mail :: AssertSent (WelcomeMail :: Class, Function ($ mail) { kembali $ mail-> hasto ('john@example.com '); }); }
- Gunakan
Mail::fake()
untuk mengelakkan e -mel sebenar daripada dihantar. - Gunakan
assertSent()
atauassertNotSent()
untuk mengesahkan tingkah laku.
✅ Corak yang sama berfungsi untuk:
Queue::fake()
,Cache::fake()
,Notification::fake()
,Http::fake()
.
3. Mengejutkan perkhidmatan terikat di bekas
Sekiranya anda menggunakan suntikan ketergantungan dan ingin mengganti perkhidmatan di dalam bekas:
$ this-> instance (someService :: class, mockery :: mock (someService :: class, function ($ mock) { $ mock-> harus receive ('proses')-> sekali ()-> andreturn ('keputusan mengejek'); }));
Atau lebih bersih:
$ this-> mock (someService :: class, function ($ mock) { $ mock-> harus receive ('proses')-> andreturn ('hasil mengejek'); });
?
->mock()
adalah kaedah penolong Laravel yang menggabungkanMockery::mock()
danapp()->instance()
.
4. Menggunakan Http::fake()
untuk panggilan http luaran
Elakkan memanggil API sebenar semasa ujian:
Http :: palsu ([ 'api.github.com/*' => http :: respons (['name' => 'laravel'], 200), ]); // Sekarang buat panggilan sebenar $ response = http :: get ('https://api.github.com/orgs/laravel'); // Permintaan menegaskan telah dihantar Http :: assertSent (fungsi ($ permintaan) { kembali $ permintaan-> url () === 'https://api.github.com/orgs/laravel'; });
Anda juga boleh menggunakan Http::fake()->preventStrayRequests()
untuk memastikan hanya URL yang dijangka dipukul.
5. Mocks separa - hanya mengejek kaedah tertentu
Kadang -kadang anda ingin mengejek hanya satu kaedah kelas dan menjaga orang lain nyata.
$ Service = Mockery :: Mock (Myservice :: Class) -> MakePartial () -> Harus Receive ('ExternalCall') -> Andreturn ('dummy') -> getMock (); $ this-> instance (myservice :: class, $ perkhidmatan);
Sekarang hanya externalCall()
yang dihina; Kaedah lain dijalankan secara normal.
6. Bersihkan ejekan selepas ujian
Sentiasa bersihkan ejekan anda untuk mengelakkan pencemaran ujian:
Fungsi yang dilindungi Teardown (): tidak sah { Mockery :: Close (); ibu bapa :: teardown (); }
✅ Kelas ujian asas Laravel (seperti
TestCase
) biasanya mengendalikan ini.
Petua utama
- Lebih suka palsu (
Mail::fake()
,Queue::fake()
) lebih banyak mengejek apabila tersedia-mereka lebih mudah dan khusus laravel. - Gunakan mocks apabila anda memerlukan kawalan halus ke atas nilai pulangan atau tingkah laku.
- Elakkan over-mocking-hanya mengejek apa yang anda perlukan untuk mengasingkan.
- Gunakan
spy()
untuk memerhatikan panggilan sebenar tanpa mengganggu:$ this-> spy (someService :: class); // kemudian: $ this-> hendaklah dicapai (someService :: class, 'method');
Pada asasnya, Laravel membuat mengejek bersih dan ekspresif. Gunakan palsu untuk komponen Laravel, dan ejekan untuk perkhidmatan tersuai. Ia memastikan ujian anda cepat, boleh dipercayai, dan bebas daripada sistem luaran.
Atas ialah kandungan terperinci Bagaimana cara mengejek objek dalam ujian Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Buat jadual rujukan untuk merekodkan hubungan cadangan, termasuk rujukan, rujukan, kod cadangan dan masa penggunaan; 2. Tentukan hubungan dan hubungan hasmany dalam model pengguna untuk menguruskan data cadangan; 3. Menjana kod cadangan yang unik semasa mendaftar (boleh dilaksanakan melalui peristiwa model); 4. Menangkap kod cadangan dengan menanyakan parameter semasa pendaftaran, mewujudkan hubungan cadangan selepas pengesahan dan mencegah penyimpanan diri; 5. mencetuskan mekanisme ganjaran apabila pengguna yang disyorkan melengkapkan tingkah laku yang ditentukan (urutan langganan); 6. Menjana pautan cadangan yang boleh dikongsi, dan gunakan URL tandatangan Laravel untuk meningkatkan keselamatan; 7. Statistik cadangan paparan di papan pemuka, seperti jumlah cadangan dan nombor yang ditukar; Adalah perlu untuk memastikan kekangan pangkalan data, sesi atau kuki berterusan,

ChooseafeatureFlagstrategySuchasconfig-berasaskan, didorong oleh pangkalan data, orthird-partytoolslikeFlagsmith.2.setupadatabase-drivensystembycreatingamigrationforafeature_flagstableWithname, didayakan, andrulesfreate.3

Corak repositori adalah corak reka bentuk yang digunakan untuk memusnahkan logik perniagaan dari logik akses data. 1. Ia mentakrifkan kaedah akses data melalui antara muka (kontrak); 2. Operasi khusus dilaksanakan oleh kelas repositori; 3. Pengawal menggunakan antara muka melalui suntikan ketergantungan, dan tidak terus menghubungi sumber data; 4. Kelebihan termasuk kod kemas, kesesuaian yang kuat, penyelenggaraan mudah dan kerjasama pasukan; 5. Berkenaan dengan projek sederhana dan besar, projek kecil boleh menggunakan model secara langsung.

Buat projek Laravel baru dan mulakan perkhidmatan; 2. Menjana model, penghijrahan dan pengawal dan jalankan penghijrahan; 3. Tentukan laluan RESTful dalam Laluan/API.PHP; 4. Melaksanakan kaedah tambahan, penghapusan, pengubahsuaian dan pertanyaan dalam postcontroller dan mengembalikan respons JSON; 5. Gunakan postman atau curl untuk menguji fungsi API; 6. Pilihan menambah pengesahan API melalui Sanctum; Akhirnya dapatkan struktur yang jelas, Laravelrestapi yang lengkap dan boleh diperpanjang, sesuai untuk aplikasi praktikal.

Eloquentorm adalah sistem pemetaan relasi objek terbina dalam Laravel. Ia mengendalikan pangkalan data melalui sintaks PHP dan bukannya SQL asli, menjadikan kod lebih ringkas dan mudah dikekalkan; 1. Setiap jadual data sepadan dengan kelas model, dan setiap rekod wujud sebagai contoh model; 2. Mengamalkan mod rekod aktif, dan contoh model boleh disimpan atau dikemas kini dengan sendirinya; 3. Penyerahan batch sokongan, dan atribut yang boleh diisi $ perlu ditakrifkan dalam model untuk memastikan keselamatan; 4. Memberi sokongan hubungan yang kuat, seperti satu-satu, satu-ke-banyak, banyak-banyak, dan lain-lain, dan anda boleh mengakses data yang berkaitan melalui panggilan kaedah; 5. Pembina pertanyaan bersepadu, di mana, Orderby dan kaedah lain boleh dipanggil dirantai untuk membina pertanyaan; 6. Aksesor sokongan dan pengubahsuaian, yang boleh memformat nombor apabila memperoleh atau menetapkan atribut.

CreateOrmodifyLaunch.jsoninvscodebyopeningtherunanddebugview, SelectingYourenVironment (mis., Python, node.js), danConfiguringitfo RyourtestFramework (mis., Pytest, jest) .2.SetBreakPointSinyourtestFile, SelectthedebugConfiguration, andStartDebuggingWithf5topaus

Gunakan FormRequests untuk mengekstrak logik pengesahan bentuk kompleks dari pengawal, meningkatkan kebolehkerjaan kod dan kebolehgunaan semula. 1. Kaedah Penciptaan: Menjana kelas permintaan melalui perintah Artisan Buat: Permintaan; 2. Peraturan Definisi: Tetapkan logik pengesahan medan dalam kaedah () kaedah; 3. Penggunaan Pengawal: Menerima permintaan secara langsung dengan kelas ini sebagai parameter, dan Laravel secara automatik mengesahkan; 4. Penghakiman Kebenaran: Kawalan Kebenaran Pengguna Melalui Kaedah ()) Kaedah; 5. Peraturan Pelarasan Dinamik: Kembalikan Peraturan Pengesahan Berbeza mengikut Kandungan Permintaan.

Setuplaravelasanapibackendbyinstallinglaravel, configuringthedatabase, creatingapiroutes, andreturningjsonfromcontrollers, optionsingleusinglaravelsanctumforauthentication.2.Choosebetweenastandalonereactspaservedserervedsarreasparaterorusinginerin
