Maqolalar

PHPUnit va PEST-dan foydalanib, oddiy misollar bilan Laravelda testlarni qanday bajarishni bilib oling

Avtomatlashtirilgan testlar yoki birlik testlari haqida gap ketganda, har qanday dasturlash tilida ikkita qarama-qarshi fikr mavjud:

  • Vaqt isrofi
  • Busiz qilolmaysiz

Shunday qilib, ushbu maqola bilan biz birinchisini ishontirishga harakat qilamiz, ayniqsa Laravelda avtomatlashtirilgan testni boshlash qanchalik osonligini namoyish qilish orqali.

Avval "nima uchun" haqida gapiraylik, keyin esa qanday qilib ba'zi misollarni ko'rib chiqaylik.

Nima uchun bizga avtomatlashtirilgan test kerak

Avtomatlashtirilgan testlar kodning bir qismini ishga tushiradi va har qanday xatolar haqida xabar beradi. Bu ularni tasvirlashning eng oddiy usuli. Tasavvur qiling-a, ilovada yangi xususiyat paydo bo'ladi, shundan so'ng shaxsiy robot yordamchisi borib, yangi xususiyatni qo'lda sinab ko'radi, shu bilan birga yangi kod eski xususiyatlarni buzmaganligini tekshiradi.

Bu asosiy afzallik: barcha xususiyatlarni avtomatik ravishda qayta sinovdan o'tkazish. Bu qo'shimcha ishdek tuyulishi mumkin, lekin agar siz "robot" ga buni qilishni aytmasangiz, biz buni qo'lda qilishimiz kerak, to'g'rimi? 

Yoki yangi funksiyalar ishlayaptimi yoki yo‘qligini tekshirmasdan chiqarilishi mumkin, chunki foydalanuvchilar xatolar haqida xabar berishadi.

Avtomatlashtirilgan testlar bizga bir qancha afzalliklarni berishi mumkin:

  • Qo'lda sinov vaqtini tejash;
  • Ular regressiyaga yo'l qo'ymaslik orqali amalga oshirilgan yangi funktsiyaga ham, birlashtirilgan funktsiyalarga ham vaqtni tejash imkonini beradi;
  • Ushbu imtiyozni barcha yangi xususiyatlar va allaqachon joriy qilingan barcha xususiyatlar bilan ko'paytiring;
  • Oldingi uchta nuqta har bir yangi versiyaga tegishli;
  • ...

Ilovangizni bir-ikki yil ichida tasavvur qilishga harakat qiling, jamoada oldingi yillarda yozilgan kodni bilmaydigan, hatto uni qanday sinab ko‘rishni ham bilmaydigan yangi ishlab chiquvchilar bor. 

Bizning birinchi avtomatlashtirilgan testlarimiz

Birinchisini amalga oshirish uchun Laravelda avtomatlashtirilgan sinov, hech qanday kod yozishingiz shart emas. Ha, siz buni to'g'ri o'qidingiz. Oldindan o'rnatishda hamma narsa allaqachon sozlangan va tayyorlangandefiLaravel nite, shu jumladan eng birinchi asosiy misol.

Siz Laravel loyihasini o'rnatishga urinib ko'rishingiz va darhol birinchi testlarni bajarishingiz mumkin:

laravel new project
cd project
php artisan test

Bu sizning konsolingizdagi natija bo'lishi kerak:

Agar oldingi holatga nazar tashlasakdefiLaravel kechasi /tests, bizda ikkita fayl bor:

testlar/Feature/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Bu erda nima bo'layotganini tushunish uchun hech qanday sintaksisni bilishingiz shart emas: bosh sahifani yuklang va holat kodi borligini tekshiring. HTTP è "200 OK".

Usul nomi sifatida ham tanilgan test_the_application_returns_a_successful_response() Test natijalarini ko'rganingizda, tagiga chizilgan belgini bo'sh joy bilan almashtirish orqali o'qiladigan matnga aylanadi.

tests/Unit/ExampleTest.php :

class ExampleTest extends TestCase
{
    public function test_that_true_is_true()
    {
        $this->assertTrue(true);
    }
}

Biroz ma'nosiz ko'rinadi, bu rostmi yoki yo'qligini tekshiryapsizmi? 

Birlik testlari haqida biroz keyinroq gaplashamiz. Hozircha siz har bir testda nima sodir bo'lishini tushunishingiz kerak.

  • Jilddagi har bir sinov fayli /tests ning TestCase-ni kengaytiradigan PHP klassi PHPUnit
  • Har bir sinfda siz bir nechta usullarni yaratishingiz mumkin, odatda vaziyatni sinab ko'rish uchun bitta usul
  • Har bir usulda uchta harakat mavjud: vaziyatni tayyorlash, keyin harakat qilish va keyin natija kutilganligini tekshirish (tasdiqlash).

Strukturaviy ravishda, siz bilishingiz kerak bo'lgan hamma narsa, qolgan hamma narsa siz sinab ko'rmoqchi bo'lgan aniq narsalarga bog'liq.

Bo'sh test sinfini yaratish uchun ushbu buyruqni bajaring:

php artisan make:test HomepageTest

Fayl yaratiladi tests/Feature/HomepageTest.php:

class HomepageTest extends TestCase
{
    // Replace this method with your own ones
    public function test_example()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Endi Laravelda test kodi bajarilmasa nima bo'lishini ko'rib chiqamiz

Keling, test tasdiqlari kutilgan natijani bermasa nima bo'lishini ko'rib chiqamiz.

Keling, misol testlarini bunga o'zgartiramiz:

class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/non-existing-url');
 
        $response->assertStatus(200);
    }
}
 
 
class ExampleTest extends TestCase
{
    public function test_that_true_is_false()
    {
        $this->assertTrue(false);
    }
}

Va endi, agar biz buyruqni bajarsak php artisan test yana:

 FAIL  Tests\Unit\ExampleTest
⨯ that true is true
 
 FAIL  Tests\Feature\ExampleTest
⨯ the application returns a successful response
 
---
 
• Tests\Unit\ExampleTest > that true is true
Failed asserting that false is true.
 
at tests/Unit/ExampleTest.php:16
   12▕      * @return void
   13▕      */
   14▕     public function test_that_true_is_true()
   15▕     {
➜  16▕         $this->assertTrue(false);
   17▕     }
   18▕ }
   19▕
 
• Tests\Feature\ExampleTest > the application returns a successful response
Expected response status code [200] but received 404.
Failed asserting that 200 is identical to 404.
 
at tests/Feature/ExampleTest.php:19
   15▕     public function test_the_application_returns_a_successful_response()
   16▕     {
   17▕         $response = $this->get('/non-existing-url');
   18▕
➜  19▕         $response->assertStatus(200);
   20▕     }
   21▕ }
   22▕
 
 
Tests:  2 failed
Time:   0.11s

Ikki muvaffaqiyatsiz test mavjud boʻlib, FAIL deb belgilangan, quyida tushuntirishlar va muvaffaqiyatsiz testlarning aniq qatoriga ishora qiluvchi oʻqlar mavjud. Xatolar shu tarzda ko'rsatiladi.

Misol: Laravelda ro'yxatga olish formasi kodini sinab ko'rish

Faraz qilaylik, bizda forma bor va biz turli holatlarni sinab ko'rishimiz kerak: biz uning noto'g'ri ma'lumotlar bilan ishlamayaptimi yoki yo'qligini tekshiramiz, to'g'ri kiritish bilan muvaffaqiyatli yoki yo'qligini tekshiramiz va hokazo.

Rasmiy boshlang'ich to'plami Laravel Breeze tomonidan i o'z ichiga oladi uning ichidagi funksionallikni sinab ko'rish. Keling, u erdan ba'zi misollarni ko'rib chiqaylik:

tests/Feature/RegistrationTest.php

use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class RegistrationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_registration_screen_can_be_rendered()
    {
        $response = $this->get('/register');
 
        $response->assertStatus(200);
    }
 
    public function test_new_users_can_register()
    {
        $response = $this->post('/register', [
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => 'password',
            'password_confirmation' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
}

Bu erda bitta sinfda ikkita test mavjud, chunki ular ikkalasi ham ro'yxatdan o'tish shakli bilan bog'liq: biri shakl to'g'ri yuklanganligini tekshiradi va boshqasi topshirish yaxshi ishlayotganligini tekshiradi.

Keling, natijani tekshirishning yana ikkita usuli, yana ikkita tasdiq bilan tanishaylik: $this->assertAuthenticated()$response->assertRedirect(). Rasmiy hujjatlarda mavjud bo'lgan barcha tasdiqlarni tekshirishingiz mumkin PHPUnit e Laravel javobi . Mavzu bo'yicha ba'zi umumiy tasdiqlar mavjudligini unutmang $this, boshqalar esa o'ziga xoslikni tekshiradi $responsemarshrut chaqiruvidan.

Yana bir muhim narsa - bu use RefreshDatabase;ibora, chiziq bilan, sinf tepasiga kiritilgan. Sinov harakatlari ma'lumotlar bazasiga ta'sir qilishi mumkin bo'lganda kerak bo'ladi, chunki bu misolda jurnalga yangi yozuv qo'shiladi usersma'lumotlar bazasi jadvali. Buning uchun siz yangilanadigan alohida test ma'lumotlar bazasini yaratishingiz kerak php artisan migrate:freshhar safar testlar o'tkaziladi.

Sizda ikkita variant bor: jismoniy ravishda alohida ma'lumotlar bazasini yaratish yoki xotiradagi SQLite ma'lumotlar bazasidan foydalanish. Ikkalasi ham faylda sozlangan phpunit.xmlsukut bo'yicha taqdim etiladidefinita bilan Laravel. Xususan, sizga ushbu qism kerak:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
    <!-- <env name="DB_DATABASE" value=":memory:"/> -->
    <env name="MAIL_MAILER" value="array"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
</php>

ga qarang DB_CONNECTIONDB_DATABASEqaysilariga izoh berilgan? Agar sizning serveringizda SQLite bo'lsa, eng oddiy amal bu satrlarni izohdan chiqarishdir va testlaringiz ushbu xotiradagi ma'lumotlar bazasiga qarshi ishlaydi.

Ushbu testda biz foydalanuvchi muvaffaqiyatli autentifikatsiya qilinganligini va to'g'ri bosh sahifaga yo'naltirilganligini aytamiz, ammo biz ma'lumotlar bazasidagi haqiqiy ma'lumotlarni ham sinab ko'rishimiz mumkin.

Ushbu kodga qo'shimcha ravishda:

$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);

Biz ham foydalanishimiz mumkin ma'lumotlar bazasi sinov da'volari va shunga o'xshash narsani qiling:

$this->assertDatabaseCount('users', 1);
 
// Or...
$this->assertDatabaseHas('users', [
    'email' => 'test@example.com',
]);

Kirish sahifasiga misol

Keling, Laravel Breeze bilan kirish sahifasining yana bir misolini ko'rib chiqaylik

tests/Feature/AuthenticationTest.php:

class AuthenticationTest extends TestCase
{
    use RefreshDatabase;
 
    public function test_login_screen_can_be_rendered()
    {
        $response = $this->get('/login');
 
        $response->assertStatus(200);
    }
 
    public function test_users_can_authenticate_using_the_login_screen()
    {
        $user = User::factory()->create();
 
        $response = $this->post('/login', [
            'email' => $user->email,
            'password' => 'password',
        ]);
 
        $this->assertAuthenticated();
        $response->assertRedirect(RouteServiceProvider::HOME);
    }
 
    public function test_users_can_not_authenticate_with_invalid_password()
    {
        $user = User::factory()->create();
 
        $this->post('/login', [
            'email' => $user->email,
            'password' => 'wrong-password',
        ]);
 
        $this->assertGuest();
    }
}

Bu login shakli haqida. Mantiq ro'yxatdan o'tishga o'xshaydi, shunday emasmi? Ammo ikkita o'rniga uchta usul, shuning uchun bu yaxshi va yomon stsenariylarni sinab ko'rishning namunasidir. Shunday qilib, umumiy mantiq shundaki, siz ikkala holatni ham sinab ko'rishingiz kerak: ishlar yaxshi ketayotganda va muvaffaqiyatsiz bo'lganda.

Innovatsion axborot byulleteni
Innovatsiyalar haqidagi eng muhim yangiliklarni o'tkazib yubormang. Ularni elektron pochta orqali olish uchun ro'yxatdan o'ting.

Bundan tashqari, ushbu testda ko'rgan narsangiz - bu foydalanish Ma'lumotlar bazasi zavodlari : Laravel soxta foydalanuvchi yaratadi ( yana, yangilangan test ma'lumotlar bazasida ) va keyin to'g'ri yoki noto'g'ri hisob ma'lumotlari bilan tizimga kirishga harakat qiladi.

Shunga qaramay, Laravel zavodni oldindan ishlab chiqaradidefiuchun noto'g'ri ma'lumotlar bilan nita Usermodel, qutidan tashqarida.

database/factories/UserFactory.php:

class UserFactory extends Factory
{
    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

Ko'rdingizmi, Laravelning o'zi qancha narsalarni tayyorlaydi, shuning uchun testni boshlash biz uchun oson bo'ladimi?

Shunday qilib, agar biz ijro etsak php artisan testLaravel Breeze-ni o'rnatgandan so'ng, biz shunga o'xshash narsani ko'rishimiz kerak:

 PASS  Tests\Unit\ExampleTest
✓ that true is true
 
 PASS  Tests\Feature\Auth\AuthenticationTest
✓ login screen can be rendered
✓ users can authenticate using the login screen
✓ users can not authenticate with invalid password
 
 PASS  Tests\Feature\Auth\EmailVerificationTest
✓ email verification screen can be rendered
✓ email can be verified
✓ email is not verified with invalid hash
 
 PASS  Tests\Feature\Auth\PasswordConfirmationTest
✓ confirm password screen can be rendered
✓ password can be confirmed
✓ password is not confirmed with invalid password
 
 PASS  Tests\Feature\Auth\PasswordResetTest
✓ reset password link screen can be rendered
✓ reset password link can be requested
✓ reset password screen can be rendered
✓ password can be reset with valid token
 
 PASS  Tests\Feature\Auth\RegistrationTest
✓ registration screen can be rendered
✓ new users can register
 
 PASS  Tests\Feature\ExampleTest
✓ the application returns a successful response
 
Tests:  17 passed
Time:   0.61s

Funktsional testlar birlik testlari va boshqalar bilan solishtirganda

Siz pastki papkalarni ko'rdingiz tests/Feature e tests/Unit ?. 

Ularning orasidagi farq nima? 

Global miqyosda, Laravel/PHP ekotizimidan tashqarida bir necha turdagi avtomatlashtirilgan testlar mavjud. Quyidagi kabi shartlarni topishingiz mumkin:

  • Birlik sinovlari
  • Xususiyatlar sinovi
  • Integratsiya testlari
  • Funktsional testlar
  • Oxir-oqibat sinov
  • Qabul qilish testlari
  • Tutun sinovlari
  • va boshqalar.

Bu murakkab ko'rinadi va bu turdagi testlar orasidagi haqiqiy farqlar ba'zan loyqa bo'ladi. Shuning uchun Laravel bu chalkash atamalarning barchasini soddalashtirdi va ularni ikkiga guruhladi: birlik/xususiyat.

Oddiy qilib aytganda, xususiyat testlari ilovalaringizning haqiqiy funksiyalarini bajarishga harakat qiladi: URL manzilini oling, API-ga qo'ng'iroq qiling, shaklni to'ldirish kabi aniq xatti-harakatlarga taqlid qiling. Xususiyat testlari odatda har qanday loyiha foydalanuvchisi real hayotda qo'lda bajaradigan bir xil yoki shunga o'xshash operatsiyalarni bajaradi.

Birlik testlari ikkita ma'noga ega. Umuman olganda, har qanday avtomatlashtirilgan test "birlik testi" deb nomlanishini va butun jarayonni "birlik testi" deb atash mumkinligini topishingiz mumkin. Ammo funksionallik va birlik kontekstida bu jarayon alohida ochiq bo'lmagan kod birligini sinashdan iborat. Misol uchun, sizda parametrlar bilan umumiy buyurtma narxi kabi biror narsani hisoblaydigan usul bilan Laravel sinfingiz bor. Shuning uchun, birlik testi ushbu usuldan (kod birligi) turli parametrlar bilan to'g'ri natijalar qaytarilganligini bildiradi.

Birlik testini yaratish uchun siz bayroqni qo'shishingiz kerak:

php artisan make:test OrderPriceTest --unit

Yaratilgan kod birlikdan oldingi test bilan bir xildefiLaravel tizimi:

class OrderPriceTest extends TestCase
{
    public function test_example()
    {
        $this->assertTrue(true);
    }
}

Ko'rib turganingizdek, u mavjud emas RefreshDatabase, va bu biri defiBirlik testining eng keng tarqalgan ta'riflari: u ma'lumotlar bazasiga tegmaydi, u ishlaydigan dasturdan ajratilgan "qora quti" sifatida ishlaydi.

Yuqorida aytib o'tgan misolga taqlid qilishga harakat qilib, bizda xizmat ko'rsatish sinfi borligini tasavvur qilaylik OrderPrice.

app/Services/OrderPriceService.php:

class OrderPriceService
{
    public function calculatePrice($productId, $quantity, $tax = 0.0)
    {
        // Some kind of calculation logic
    }
}

Keyin, birlik testi quyidagicha ko'rinishi mumkin:

class OrderPriceTest extends TestCase
{
    public function test_single_product_no_taxes()
    {
        $product = Product::factory()->create(); // generate a fake product
        $price = (new OrderPriceService())->calculatePrice($product->id, 1);
        $this->assertEquals(1, $price);
    }
 
    public function test_single_product_with_taxes()
    {
        $price = (new OrderPriceService())->calculatePrice($product->id, 1, 20);
        $this->assertEquals(1.2, $price);
    }
 
    // More cases with more parameters
}

Laravel loyihalari bilan bog'liq shaxsiy tajribamda, testlarning aksariyati birlik testlari emas, balki xususiyatlar testlaridir. Birinchidan, ilovangiz ishlayotganligini, haqiqiy odamlar undan qanday foydalanishini sinab ko'rishingiz kerak.

Keyinchalik, agar sizda maxsus hisob-kitoblar yoki mantiq bo'lsa, mumkin definire birlik sifatida, parametrlar bilan siz buning uchun maxsus birlik testlarini yaratishingiz mumkin.

Ba'zida testlarni yozish kodning o'zini o'zgartirishni va uni yanada "sinov" qilish uchun uni qayta tiklashni talab qiladi: birliklarni maxsus sinflar yoki usullarga ajratish.

Sinovlarni qachon/qanday qilish kerak?

Buning haqiqiy qo'llanilishi nima php artisan test, uni qachon ishga tushirish kerak?

Sizning biznesingizning ish jarayoniga qarab, turli xil yondashuvlar mavjud, lekin odatda omborga so'nggi kod o'zgarishlarini kiritishdan oldin barcha testlar "yashil" (ya'ni xatosiz) bo'lishini ta'minlashingiz kerak.

Keyin, siz o'zingizning vazifangiz bo'yicha mahalliy ravishda ishlaysiz va tugatdim deb o'ylasangiz, hech narsani buzmaganingizga ishonch hosil qilish uchun bir nechta testlarni bajaring. Esda tutingki, sizning kodingiz nafaqat sizning mantiqingizda xatolarga olib kelishi mumkin, balki uzoq vaqt oldin yozilgan boshqa birovning kodidagi boshqa xatti-harakatlarni ham beixtiyor buzishi mumkin.

Agar bir qadam oldinga borsak, avtomatlashtirish mumkin ko'p narsalar. Har xil CI/CD vositalari yordamida siz har safar kimdir ma'lum bir Git filialiga o'zgartirish kiritsa yoki kodni ishlab chiqarish bo'limiga birlashtirishdan oldin bajariladigan testlarni belgilashingiz mumkin. Eng oddiy ish jarayoni Github Actions dan foydalanish bo'ladi, menda bor alohida video buni tasdiqlaydi.

Siz nimani sinab ko'rishingiz kerak?

"Sinov qamrovi" qanchalik katta bo'lishi kerakligi haqida turli xil fikrlar mavjud: har bir sahifada mumkin bo'lgan har qanday operatsiya va vaziyatni sinab ko'ring yoki ishni eng muhim qismlar bilan cheklang.

Darhaqiqat, men avtomatlashtirilgan testlarni haqiqiy foyda keltirishdan ko'ra ko'proq vaqt talab qilganlikda ayblaydigan odamlarga qo'shilaman. Agar siz har bir tafsilot uchun test yozsangiz, bu sodir bo'lishi mumkin. Ya'ni, bu sizning loyihangiz tomonidan talab qilinishi mumkin: asosiy savol "potentsial xatoning narxi qanday".

Boshqacha qilib aytadigan bo'lsak, siz "Agar ushbu kod muvaffaqiyatsiz bo'lsa nima bo'ladi?" Degan savolni berib, sinov harakatlaringizni birinchi o'ringa qo'yishingiz kerak. Agar to'lov tizimingizda xatolar bo'lsa, bu biznesga bevosita ta'sir qiladi. Shunday qilib, agar sizning rollaringiz/ruxsatlaringizning funksionalligi buzilgan bo'lsa, bu katta xavfsizlik muammosi.

Menga Mett Staufferning konferentsiyada aytgani yoqadi: "Avval siz o'sha narsalarni sinab ko'rishingiz kerak, agar ular muvaffaqiyatsiz bo'lsa, sizni ishdan bo'shatishga olib keladi." Albatta, bu mubolag'a, lekin siz bir fikrni tushunasiz: avval muhim narsalarni sinab ko'ring. Va keyin boshqa xususiyatlar, agar vaqtingiz bo'lsa.

PEST: PHPUnitga yangi muqobil

Yuqoridagi barcha misollar Laravel oldindan sinov vositasiga asoslangandefikechasi: PHPUnit . Ammo yillar davomida ekotizimda boshqa vositalar paydo bo'ldi va eng so'nggi mashhurlaridan biri Zararli . Rasmiy Laravel xodimi tomonidan yaratilgan Nuno Maduro , sintaksisni soddalashtirish, testlar uchun kod yozishni yanada tezlashtirishga qaratilgan.

Kaput ostida u yuguradi su PHPUnit, qo'shimcha qatlam sifatida, ba'zi oldindan takrorlangan qismlarni minimallashtirishga harakat qiladidefiPHPUnit kodining bir qismi.

Keling, bir misolni ko'rib chiqaylik. Xususiyatlardan oldingi test sinfini eslangdefiLaravelda nited? Men sizga eslataman:

namespace Tests\Feature;
 
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
 
class ExampleTest extends TestCase
{
    public function test_the_application_returns_a_successful_response()
    {
        $response = $this->get('/');
 
        $response->assertStatus(200);
    }
}

Xuddi shu sinov PEST bilan qanday ko'rinishini bilasizmi?

test('the application returns a successful response')->get('/')->assertStatus(200);

Ha, BIR qator kod va shu. Shunday qilib, PESTning maqsadi:

  • Har bir narsa uchun sinflar va usullarni yaratish;
  • Test ishini kengaytirish;
  • Harakatlarni alohida satrlarga qo'yish orqali: PEST-da siz ularni bir-biriga bog'lashingiz mumkin.

Laravelda PEST testini yaratish uchun siz qo'shimcha bayroqni belgilashingiz kerak:

php artisan make:test HomepageTest --pest

Ushbu yozish paytida PEST Laravel dasturchilari orasida juda mashhur, ammo bu qo'shimcha vositadan foydalanish va uning sintaksisini, shuningdek, PHPUnit eslatmasini o'rganish sizning shaxsiy xohishingizga bog'liq.

BlogInnovazione.it

Innovatsion axborot byulleteni
Innovatsiyalar haqidagi eng muhim yangiliklarni o'tkazib yubormang. Ularni elektron pochta orqali olish uchun ro'yxatdan o'ting.

So'nggi maqolalar

Catania poliklinikasida Apple tomoshabin bilan kengaytirilgan haqiqatga innovatsion aralashuv

Kataniya poliklinikasida Apple Vision Pro tijorat ko‘rish vositasi yordamida oftalmoplastika operatsiyasi o‘tkazildi...

3 may 2024

Bolalar uchun sahifalarni bo'yashning afzalliklari - barcha yoshdagilar uchun sehrli dunyo

Rang berish orqali nozik vosita ko'nikmalarini rivojlantirish bolalarni yozish kabi murakkabroq ko'nikmalarga tayyorlaydi. Rang berish uchun…

2 may 2024

Kelajak bu yerda: Yuk tashish sanoati global iqtisodiyotni qanday inqilob qilmoqda

Harbiy dengiz sektori 150 milliardlik bozorga yo'l olgan haqiqiy global iqtisodiy kuchdir...

1 may 2024

Noshirlar va OpenAI sun'iy intellekt tomonidan qayta ishlangan ma'lumotlar oqimini tartibga solish bo'yicha shartnomalar imzolaydilar.

O'tgan dushanba kuni Financial Times OpenAI bilan shartnoma imzolaganini e'lon qildi. FT o'zining jahon darajasidagi jurnalistikasini litsenziyalaydi...

30 Aprel 2024