Jadual Kandungan
2. Menggunakan palsu dan mengejek fasad Laravel
Contoh: palsu fasad mel
3. Mengejutkan perkhidmatan terikat di bekas
4. Menggunakan Http::fake() untuk panggilan http luaran
5. Mocks separa - hanya mengejek kaedah tertentu
6. Bersihkan ejekan selepas ujian
Petua utama
Rumah rangka kerja php Laravel Bagaimana cara mengejek objek dalam ujian Laravel?

Bagaimana cara mengejek objek dalam ujian Laravel?

Jul 27, 2025 am 03:13 AM
laravel Ujian unit

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.

Bagaimana cara mengejek objek dalam ujian Laravel?

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.

Bagaimana cara mengejek objek dalam ujian Laravel?

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.

Bagaimana cara mengejek objek dalam ujian Laravel?
 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() .

Bagaimana cara mengejek objek dalam ujian Laravel?

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() atau assertNotSent() 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 menggabungkan Mockery::mock() dan app()->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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1517
276
Bagaimana untuk melaksanakan sistem rujukan di Laravel? Bagaimana untuk melaksanakan sistem rujukan di Laravel? Aug 02, 2025 am 06:55 AM

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,

Bagaimana untuk melaksanakan bendera ciri dalam aplikasi Laravel? Bagaimana untuk melaksanakan bendera ciri dalam aplikasi Laravel? Jul 30, 2025 am 01:45 AM

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

Apakah kontrak repositori di Laravel? Apakah kontrak repositori di Laravel? Aug 03, 2025 am 12:10 AM

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.

Bagaimana membina API REST dengan Laravel? Bagaimana membina API REST dengan Laravel? Jul 30, 2025 am 03:41 AM

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.

Apakah Orm Fasih di Laravel? Apakah Orm Fasih di Laravel? Jul 29, 2025 am 03:50 AM

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.

Cara Debug Ujian Unit Di VSCOD Cara Debug Ujian Unit Di VSCOD Aug 01, 2025 am 06:12 AM

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

Menggunakan permintaan borang untuk pengesahan di Laravel. Menggunakan permintaan borang untuk pengesahan di Laravel. Jul 30, 2025 am 05:04 AM

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.

Bagaimana untuk mengintegrasikan React dengan Laravel? Bagaimana untuk mengintegrasikan React dengan Laravel? Jul 30, 2025 am 04:05 AM

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

See all articles