Kana zvasvika kune otomatiki bvunzo kana yeyuniti bvunzo, mune chero mutauro wechirongwa, pane maviri anopikisana maonero:
Saka, nechinyorwa ichi tichaedza kunyengerera iyo yekutanga, kunyanya nekuratidza kuti zviri nyore sei kutanga ne otomatiki kuyedzwa muLaravel.
Kutanga ngatitaure nezve "nei", uye tozoona mimwe mienzaniso yekuti sei.
Maedzo otomatiki anomhanyisa zvikamu zvekodhi uye anoshuma chero kukanganisa. Ndiyo nzira yakareruka yekuvatsanangura. Fungidzira uchiburitsa chinhu chitsva muapp, uyezve robhoti mubatsiri aienda oedza nemaoko chinhu chitsva, ukuwo achiyedza kana iyo kodhi nyowani haina kutyora chero chekare maficha.
Iyi ndiyo mukana mukuru: kudzokorora zvese maficha otomatiki. Izvi zvingaita sebasa rekuwedzera, asi kana ukasaudza "robhoti" kuti riite, isu tinofanira kuzviita nemaoko, handiti?
Kana kuti maficha matsva anogona kuburitswa pasina kuyedza kuti anoshanda here, achitarisira kuti vashandisi vachataura tsikidzi.
Otomatiki bvunzo dzinogona kutipa akati wandei mabhenefiti:
Edza kufungidzira chikumbiro chako mugore kana maviri, nevagadziri vatsva muchikwata vasingazive kodhi yakanyorwa mumakore apfuura, kana kunyange maitiro ekuiedza.
Kuita yekutanga otomatiki kuyedza muLaravel, haufanire kunyora chero kodhi. Hongu, unoverenga zvakanaka. Zvese zvakatogadziriswa uye zvakagadzirirwa mu-pre-installationdefiNite yeLaravel, kusanganisira yekutanga yekutanga muenzaniso.
Unogona kuedza kuisa Laravel purojekiti uye womhanyisa bvunzo dzekutanga nekukurumidza:
laravel new project
cd project
php artisan test
Izvi zvinofanirwa kuve mhedzisiro mune yako console:
Kana tikatarisa kumberidefizuva reLaravel /tests
, tine mafaira maviri:
tests/Feature/ExampleTest.php :
class ExampleTest extends TestCase
{
public function test_the_application_returns_a_successful_response()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
Iwe haufanirwe kuziva chero syntax kuti unzwisise zviri kuitika pano: rodha peji reimba uye tarisa kana iyo mamiriro kodhi. HTTP
è "200 OK
".
Iyo inozivikanwawo sezita renzira test_the_application_returns_a_successful_response()
inova mavara anoverengwa kana uchiona mhinduro dzebvunzo, nekungotsiva chiratidzo chepasi nenzvimbo.
tests/Unit/ExampleTest.php :
class ExampleTest extends TestCase
{
public function test_that_true_is_true()
{
$this->assertTrue(true);
}
}
Zvinoita sezvisina maturo, kutarisa kuona kana ichi chiri chokwadi?
Tichazonyatso taura nezve bvunzo dzeyuniti pave paya. Parizvino, iwe unofanirwa kunzwisisa izvo zvinowanzoitika muyedzo yega yega.
/tests
ikirasi yePP inotambanudza TestCase ye PHPUnitZvimiro, ndizvo chete zvaunofanira kuziva, zvimwe zvese zvinoenderana nezvinhu chaizvo zvaunoda kuyedza.
Kuti ugadzire kirasi yekuyedza isina chinhu, ingomhanya uyu murairo:
php artisan make:test HomepageTest
Iyo faira inogadzirwa 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);
}
}
Ngationei zvino kuti chii chinoitika kana bvunzo dzekuti dzikasadzosera mhedzisiro inotarisirwa.
Ngatichinjei mienzaniso miyedzo kune iyi:
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);
}
}
Uye zvino, kana tikamhanya murairo php artisan test
zvakare:
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
Pane miyedzo miviri yakakundikana, yakanyorwa seFAIL, ine tsananguro pazasi uye miseve inonongedza kumutsara chaiwo webvunzo wakatadza. Kukanganisa kunoratidzwa nenzira iyi.
Ngatitii isu tine fomu uye isu tinoda kuyedza akasiyana kesi: isu tinotarisa kana yakundikana neiyo isiriyo data, isu tinotarisa kana ichibudirira neiyo chaiyo yekuisa, nezvimwe.
The official starter kit naLaravel Breeze inosanganisira i kuedza kushanda mukati maro. Ngatitarisei mimwe mienzaniso kubva ipapo:
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);
}
}
Pano tine bvunzo mbiri mukirasi imwe, sezvo ese ari maviri ane hukama nefomu rekunyoresa: imwe inotarisa kana fomu racho rakatakurwa nemazvo uye imwe inotarisa kana kutumira kunoshanda zvakanaka.
Ngatizivei dzimwe nzira mbiri dzekusimbisa mhedzisiro, zvimwe zviviri zvinoti: $this->assertAuthenticated()
e $response->assertRedirect()
. Unogona kutarisa zvirevo zvese zviripo mune zviri pamutemo zvinyorwa zve PHPUnit e Laravel Mhinduro . Ziva kuti zvimwe zvirevo zvinowanzoitika panhau iyi $this
, nepo vamwe vachitarisa chaiyo $response
kubva munzira yekufona.
Chimwe chinhu chakakosha ndeche use RefreshDatabase;
chirevo, nekurohwa, chakaiswa pamusoro pekirasi. Izvo zvinodikanwa kana zviito zvekuyedza zvinogona kukanganisa dhatabhesi, semumuenzaniso uyu, kutema miti kunowedzera nyowani yekupinda mu users
tafura yedatabase. Kune izvi, iwe unofanirwa kugadzira yakaparadzana bvunzo dhatabhesi iyo inozogadziridzwa nayo php artisan migrate:fresh
pese panoitwa bvunzo.
Une sarudzo mbiri: kugadzira dhatabhesi yakaparadzana kana kushandisa in-memory SQLite dhatabhesi. Ose ari maviri akagadziridzwa mufaira phpunit.xml
zvinopihwa nedefaultdefinita with Laravel. Kunyanya, iwe unoda chikamu ichi:
<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>
Onai DB_CONNECTION
e DB_DATABASE
ndedzipi dzinotaurwa nezvadzo? Kana iwe uine SQLite pane yako sevha, chiito chakareruka ndechekungosunungura iwo mitsara uye bvunzo dzako dzinomhanya dzichipesana neiyo mu-memory dhatabhesi.
Muyedzo iyi tinoti mushandisi akatenderwa zvinobudirira uye anotungamirwa kune chaiyo peji remba, asi isu tinogona zvakare kuyedza iyo chaiyo data mudhatabhesi.
Mukuwedzera kune iyi kodhi:
$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);
Tinogonawo kushandisa iyo database test zvirevo uye ita chimwe chinhu chakadai:
$this->assertDatabaseCount('users', 1);
// Or...
$this->assertDatabaseHas('users', [
'email' => 'test@example.com',
]);
Ngationei mumwe muenzaniso weLogin peji neLaravel Breeze
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();
}
}
Ndezve fomu rekupinda. Iyo pfungwa yakafanana nekunyoresa, handiti? Asi nzira nhatu panzvimbo mbiri, saka uyu muenzaniso wekuyedza zvese zvakanaka uye zvakaipa mamiriro. Saka, iyo yakajairika pfungwa ndeyekuti iwe unofanirwa kuyedza ese maviri kesi: kana zvinhu zvikafamba zvakanaka uye kana zvakundikana.
Zvakare, izvo zvaunoona muyedzo iyi kushandiswa kwe Database Factories : Laravel inogadzira mushandisi wenhema ( zvakare, pane yako yakagadziridzwa test database ) uye woedza kupinda, uine magwaro chaiwo kana asiriwo.
Zvekare, Laravel inogadzira fekitori predefinita with false data for the User
muenzaniso, kunze kwebhokisi.
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),
];
}
}
Munoona, zvingani zvinhu zvakagadzirirwa naLaravel pachayo, saka zvingave nyore here kuti isu titange kuyedza?
Saka kana tikaita php artisan test
mushure mekuisa Laravel Breeze, tinofanira kuona chimwe chinhu chakadai:
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
Iwe wakaona ma subfolders tests/Feature
e tests/Unit
?.
Ndeupi musiyano uripo pakati pavo?
Pasi rose, kunze kweLaravel/PHP ecosystem, kune akati wandei emhando dzekuedza otomatiki. Unogona kuwana mazwi akadai:
Zvinonzwika zvakaoma, uye misiyano chaiyo pakati pemhando idzi dzebvunzo dzimwe nguva inodzima. Ndosaka Laravel akarerutsa aya mazwi anovhiringa uye akaaisa muzvikamu zviviri: unit/chinhu.
Zvichitaurwa zviri nyore, maficha ebvunzo anoedza kuita iko chaiko kushanda kwezvikumbiro zvako: tora URL, fonera API, tevedzera maitiro chaiwo sekuzadza fomu. Feature bvunzo dzinowanzo kuita zvakafanana kana zvakafanana mashandiro aizoita chero mushandisi weprojekiti, pamaoko, muhupenyu chaihwo.
Miyedzo yeyuniti ine zvirevo zviviri. Kazhinji, unogona kuona kuti chero bvunzo dzeotomatiki dzinodaidzwa kuti "unit test" uye maitiro ese anogona kunzi "unit test". Asi mumamiriro ekushanda maringe neyuniti, maitiro aya ndeekuyedza imwe isiri yeruzhinji yuniti yekodhi, mukuzviparadzanisa nevamwe. Semuenzaniso, une kirasi yeLaravel ine nzira inoverengera chimwe chinhu, senge mutengo weodha yakazara nemaparamita. Naizvozvo, bvunzo yeyuniti yaizotaura kana mhinduro dzakaringana dzichidzoserwa kubva kune iyo nzira (code unit), ine akasiyana paramita.
Kuti ugadzire bvunzo yeyuniti, unofanirwa kuwedzera mureza:
php artisan make:test OrderPriceTest --unit
Kodhi yakagadzirwa yakafanana neye pre unit testdefiLaravel system:
class OrderPriceTest extends TestCase
{
public function test_example()
{
$this->assertTrue(true);
}
}
Sezvauri kuona, haipo RefreshDatabase
, uye iyi ndeimwe ye defiyakajairika unit test tsananguro: haina kubata dhatabhesi, inoshanda se "black box", yakasarudzika kubva kune inomhanya application.
Tichiedza kutevedzera muenzaniso wandambotaura, ngatimbofungidzira tine kirasi yebasa OrderPrice
.
app/Services/OrderPriceService.php:
class OrderPriceService
{
public function calculatePrice($productId, $quantity, $tax = 0.0)
{
// Some kind of calculation logic
}
}
Zvadaro, iyo unit test inogona kutaridzika seizvi:
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
}
Muchiitiko changu pachedu nemapurojekiti eLaravel, iyo yakawanda yebvunzo ndeye Feature bvunzo, kwete Unit bvunzo. Kutanga, iwe unofanirwa kuyedza kana application yako inoshanda, nzira iyo vanhu chaivo vangaishandisa.
Tevere, kana uine yakakosha kuverenga kana logic iwe unogona definire seyuniti, ine paramita, unogona kugadzira bvunzo dzeyuniti zvakanangana nazvo.
Dzimwe nguva, kunyora bvunzo kunoda kugadzirisa kodhi pachayo uye kuigadzirisa kuti iite "yeedzo": kupatsanura mayunitsi kuita makirasi akasarudzika kana nzira.
Chii chiri kushandiswa chaiko kweizvi php artisan test
, unofanira kuimhanyisa rinhi?
Kune nzira dzakasiyana, zvichienderana nebhizinesi rako mafambiro, asi kazhinji iwe unofanirwa kuve nechokwadi chekuti bvunzo dzese dziri "girinhi" (kureva-isina kukanganisa) usati wasundidzira ichangoburwa kodhi shanduko kune repository.
Zvadaro, iwe unoshanda munharaunda yako pabasa rako, uye kana iwe uchifunga kuti wapedza, shandisa mimwe miedzo kuti uone kuti hauna kutyora chero chinhu. Rangarira, kodhi yako inogona kukonzera tsikidzi kwete chete mukufunga kwako asiwo nekusaziva kutyora imwe maitiro mukodhi yemumwe munhu yakanyorwa kare.
Kana tikaitora imwe nhanho mberi, zvinokwanisika kuita otomatiki vakawanda zvinhu. Nematurusi akasiyana siyana eCI/CD, unogona kudoma bvunzo dzekumhanya pese apo mumwe munhu anosundidzira shanduko kune chaiyo Git bazi kana asati abatanidza kodhi mubazi rekugadzira. Iyo yakapfava yekufambisa ingave yekushandisa Github Zviito, ndine vhidhiyo yakasiyana zvinozvipupurira.
Kune maonero akasiyana-siyana pamusoro pekuti iyo inonzi "test coverage" inofanira kuva yakakura sei: edza zvose zvingaita kushanda uye kesi pamapeji ose, kana kuderedza basa kune zvikamu zvakakosha.
Muchokwadi, apa ndipo pandinobvumirana nevanhu vanopomera otomatiki kuyedza kutora nguva yakawanda pane kupa rubatsiro chairwo. Izvi zvinogona kuitika kana iwe ukanyora bvunzo kune yega yega yega. Izvozvo zvakati, zvinogona kudiwa neprojekti yako: mubvunzo mukuru ndewe "chii chiri mutengo wekukanganisa kunogona".
Mune mamwe mazwi, iwe unofanirwa kukoshesa kuedza kwako nekubvunza mubvunzo "Chii chingaitika kana kodhi iyi ikatadza?" Kana yako yekubhadhara system iine mabugs, inobata zvakananga bhizinesi. Saka kana kushanda kwemabasa ako / mvumo kwakaputswa, iyi inyaya hombe yekuchengetedza.
Ini ndinofarira matauriro akaitwa naMatt Stauffer pamusangano: "Unofanira kutanga waedza zvinhu izvo, kana zvikatadza, zvinokudzinga pabasa rako." Hongu iko kuwedzeredza, asi unowana zano: edza zvakakosha zvinhu kutanga. Uye zvimwe zvinhu, kana uine nguva.
Mienzaniso yese iri pamusoro yakavakirwa paLaravel pre test tooldefimanheru: PHPUnit . Asi nekufamba kwemakore mamwe maturusi akaonekwa mune ecosystem uye imwe yeazvino yakakurumbira ndeye PEST . Yakagadzirwa nemukuru Laravel mushandi Nuno Maduro , ine chinangwa chekurerutsa syntax, kugadzira kodhi yekunyora yebvunzo nekukurumidza.
Pasi pehodhi, inomhanya su PHPUnit, sechimwe chikamu, kungoyedza kuderedza zvimwe zvikamu zvakafanodzokororwadefinguva yeiyo PHPUnit kodhi.
Ngatitarisei muenzaniso. Rangarira pre feature test classdefiwakagara muLaravel? Ndichakuyeuchidza:
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);
}
}
Unoziva here kuti bvunzo imwe chete ingataridzika sei nePEST?
test('the application returns a successful response')->get('/')->assertStatus(200);
Hongu, MUMWE mutsara wekodhi uye ndizvozvo. Saka, chinangwa chePEST ndechekubvisa pamusoro pe:
Kugadzira PEST bvunzo muLaravel, unofanirwa kutsanangura imwe mureza:
php artisan make:test HomepageTest --pest
Nezvekunyora uku, PEST inonyanya kufarirwa pakati pevagadziri veLaravel, asi ndizvo zvako zvaunoda kuti ushandise ichi chekuwedzera chishandiso uye kudzidza syntax yayo, pamwe neiyo PHPUnit noti.
BlogInnovazione.it
Coveware neVeeam icharamba ichipa cyber kubira chiitiko mhinduro masevhisi. Coveware ichapa forensics uye kugadzirisa kugona…
Kufanofungidzira kugadzirisa kuri kushandura chikamu cheoiri & gasi, nemaitiro matsva uye akasimba ekutarisira zvidyarwa.…
Iyo UK CMA yakapa yambiro nezvemaitiro eBig Tech mumusika wehungwaru hwekugadzira. Ikoko…
Chirevo che "Case Green", chakagadzirwa neEuropean Union kuti chiwedzere kushanda nesimba kwezvivakwa, chapedza hurongwa hwayo hwemutemo ne…