Xa kuziwa kwiimvavanyo ezizenzekelayo okanye iimvavanyo zeyunithi, kulo naluphi na ulwimi lwenkqubo, kukho iimbono ezimbini eziphikisanayo:
Ke, ngeli nqaku siza kuzama ukukholisa eyokuqala, ngakumbi ngokubonisa ukuba kulula kangakanani ukuqalisa ngovavanyo oluzenzekelayo eLaravel.
Okokuqala makhe sithethe ngo "kutheni", kwaye emva koko makhe sibone imizekelo yendlela.
Iimvavanyo ezizenzekelayo ziqhuba iinxalenye zekhowudi kwaye zichaze naziphi na iimpazamo. Yeyona ndlela ilula yokuzichaza. Khawufane ucinge ngokukhupha into entsha kwi-app, kwaye emva koko umncedisi werobhothi uya kuhamba aze avavanye ngesandla into entsha, ngelixa evavanya ukuba ikhowudi entsha ayiphulanga naziphi na iimpawu ezindala.
Le yeyona nto iluncedo: ukuvavanya kwakhona zonke iimpawu ngokuzenzekelayo. Oku kunokubonakala ngathi ngumsebenzi owongezelelekileyo, kodwa ukuba awuyixeleli “irobhothi” ukuba iyenze, ngenye indlela kufuneka siyenze ngesandla, akunjalo?
Okanye izinto ezintsha zinokukhutshwa ngaphandle kokuvavanya ukuba ziyasebenza na, ngethemba lokuba abasebenzisi baya kuxela iimpazamo.
Uvavanyo oluzenzekelayo lungasinika iingenelo ezininzi:
Zama ukucinga ngesicelo sakho kunyaka okanye emibini, kunye nabaphuhlisi abatsha kwiqela abangayazi ikhowudi ebhalwe kwiminyaka edlulileyo, okanye nokuba ungayivavanya njani.
Ukwenza okokuqala uvavanyo oluzenzekelayo eLaravel, awudingi ukubhala nayiphi na ikhowudi. Ewe, ufunda oko kulungile. Yonke into sele icwangcisiwe kwaye ilungiselelwe kwi-pre-installationdefiNite yeLaravel, kuquka nowona mzekelo usisiseko wokuqala.
Ungazama ukufaka iprojekthi yeLaravel kwaye uqhube iimvavanyo zokuqala kwangoko:
laravel new project
cd project
php artisan test
Oku kuya kuba sisiphumo kwi-console yakho:
Ukuba sijonga kwangaphambilidefiNgobusuku beLaravel /tests
, sineefayile ezimbini:
tests/Feature/ExampleTest.php :
class ExampleTest extends TestCase
{
public function test_the_application_returns_a_successful_response()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
Awudingi ukwazi nasiphi na isivakalisi ukuqonda ukuba kuqhubeka ntoni apha: layisha iphepha lasekhaya kwaye ujonge ukuba ikhowudi yesimo HTTP
è "200 OK
".
Ikwabizwa ngokuba yindlela yegama test_the_application_returns_a_successful_response()
iba ngumbhalo ofundekayo xa ujonga iziphumo zovavanyo, ngokulula ngokutshintsha isimboli ekrwelelwe umgca ngaphantsi ngesithuba.
tests/Unit/ExampleTest.php :
class ExampleTest extends TestCase
{
public function test_that_true_is_true()
{
$this->assertTrue(true);
}
}
Kubonakala ngathi akukho nto, ukujonga ukuba oku kuyinyani?
Siza kuthetha ngokuthe ngqo malunga novavanyo lweyunithi kamva kancinane. Okwangoku, kufuneka uqonde oko kwenzeka ngokubanzi kuvavanyo ngalunye.
/tests
yiklasi ye-PHP eyandisa i-TestCase ye PHPUnithiNgokwesakhiwo, yiyo yonke into ekufuneka uyazi, yonke enye into ixhomekeke kwizinto kanye ofuna ukuzivavanya.
Ukuvelisa iklasi yovavanyo olungenanto, sebenzisa lo myalelo:
php artisan make:test HomepageTest
Ifayile yenziwe 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);
}
}
Ngoku makhe sibone ukuba kuya kwenzeka ntoni ukuba iingqinisiso zovavanyo azibuyisi iziphumo ezilindelekileyo.
Masitshintshe imizekelo yovavanyo ibe koku:
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);
}
}
Kwaye ngoku, ukuba siqhuba umyalelo php artisan test
kwakhona:
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
Kukho iimvavanyo ezimbini ezingaphumeleliyo, eziphawulwe njenge-FAIL, ezineengcaciso ezingezantsi kunye neentolo ezibhekiselele kumgca ochanekileyo wovavanyo olungaphumelelanga. Iimpazamo zibonakaliswe ngolu hlobo.
Masithi sinefomu kwaye kufuneka sivavanye iimeko ezahlukeneyo: sijonga ukuba ayiphumelelanga ngedatha engasebenziyo, sijonga ukuba iyaphumelela ngegalelo elichanekileyo, njl.
Ikhithi yokuqalisa esemthethweni nguLaravel Breeze ibandakanya i ukuvavanya ukusebenza ngaphakathi kwayo. Makhe sijonge eminye imizekelo esuka apho:
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);
}
}
Apha sineemvavanyo ezimbini kwiklasi enye, ekubeni zombini zihambelana nefom yokubhalisa: enye ihlola ukuba ifom ilayishwe ngokuchanekileyo kwaye enye ihlola ukuba ukuhanjiswa kusebenza kakuhle.
Masiqhelane nezinye iindlela ezimbini zokuqinisekisa isiphumo, iinkcazo ezimbini ezingakumbi: $this->assertAuthenticated()
e $response->assertRedirect()
. Ungajonga zonke iziqinisekiso ezikhoyo kuxwebhu olusemthethweni lwe PHPUnithi e Impendulo yeLaravel . Qaphela ukuba ezinye iingqikelelo jikelele zenzeka ngalo mbandela $this
, ngelixa abanye bejonga ethile $response
ukusuka kwifowuni yendlela.
Enye into ebalulekileyo kukuba use RefreshDatabase;
ingxelo, nge-stroke, efakwe ngaphezulu kweklasi. Kuyimfuneko xa izenzo zovavanyo zinokuchaphazela isiseko sedatha, njengoko kulo mzekelo, ukugawulwa kwemithi yongeza ungeno olutsha kwi users
itafile yedatha. Kule nto, kufuneka wenze isiseko sedatha esahlukileyo sovavanyo oluza kuhlaziywa ngalo php artisan migrate:fresh
ngalo lonke ixesha iimvavanyo ziqhutywa.
Uneendlela ezimbini ongakhetha kuzo: ukwenza ngokwasemzimbeni isiseko sedatha esahlukileyo okanye sebenzisa i-database ye-SQLite ekwinkumbulo. Zombini ziqwalaselwe kwifayile phpunit.xml
kubonelelwe ngokungagqibekangadefinita kunye Laravel. Ngokukodwa, ufuna le nxalenye:
<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>
Bona i DB_CONNECTION
e DB_DATABASE
zeziphi ekuthethwa ngazo? Ukuba uneSQLite kwiseva yakho, esona senzo silula kukukhupha nje loo migca kwaye iimvavanyo zakho ziya kuqhuba ngokuchasene nesiseko sedatha yememori.
Kolu vavanyo sithi umsebenzisi uqinisekiswe ngempumelelo kwaye uqondiswe kwiphepha lasekhaya elichanekileyo, kodwa sinokuvavanya idatha yokwenyani kwisiseko sedatha.
Ukongeza kule khowudi:
$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);
Sinokusebenzisa kwakhona iinkcazo zovavanyo lwedatabase kwaye wenze into efana nale:
$this->assertDatabaseCount('users', 1);
// Or...
$this->assertDatabaseHas('users', [
'email' => 'test@example.com',
]);
Ngoku makhe sibone omnye umzekelo wephepha lokuNgena ngeLaravel 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();
}
}
Imalunga nefom yokungena. Ingqiqo ifana nobhaliso, akunjalo? Kodwa iindlela ezintathu endaweni ezimbini, ngoko lo ngumzekelo wokuvavanya zombini iimeko ezilungileyo nezimbi. Ke, ingqiqo eqhelekileyo kukuba kufuneka uvavanye zombini iimeko: xa izinto zihamba kakuhle kwaye xa zisilela.
Kwakhona, into oyibonayo kolu vavanyo kukusetyenziswa kwe Factory Database : ILaravel yenza umsebenzisi womgunyathi ( kwakhona, kwisiseko sedatha yakho ehlaziyiweyo yovavanyo ) kwaye emva koko izama ukungena, ngeenkcukacha ezichanekileyo okanye ezingachanekanga.
Kwakhona, iLaravel ivelisa umzi-mveliso wangaphambilidefinita ngedata yobuxoki ye User
imodeli, ngaphandle 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),
];
}
}
Uyabona, zingaphi izinto ezilungiselelwe nguLaravel ngokwakhe, ngaba kuya kuba lula ukuba siqale ukuvavanya?
Ngoko ukuba sisebenza php artisan test
emva kokufaka iLaravel Breeze, kufuneka sibone into enje:
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
Uzibonile iziqulathi zeefayili tests/Feature
e tests/Unit
?.
Yintoni umahluko phakathi kwazo?
Kwihlabathi jikelele, ngaphandle kweLaravel/PHP ecosystem, kukho iindidi ezininzi zovavanyo oluzenzekelayo. Ungafumana amagama afana nala:
Ivakala intsonkothile, kwaye umahluko wokwenyani phakathi kwezi ntlobo zovavanyo ngamanye amaxesha awubonakali kakuhle. Yiyo loo nto uLaravel ewenze lula onke la magama abhidayo kwaye wawabeka kubini: iyunithi/uphawu.
Ukubeka ngokulula, iimvavanyo zeempawu zama ukwenza owona msebenzi wosetyenziso lwakho: fumana i-URL, fowunela i-API, linganisa isimilo esifana nokuzalisa ifom. Iimvavanyo zophawu zikholisa ukwenza imisebenzi efanayo okanye efanayo njengoko nawuphi na umsebenzisi weprojekthi ebeya kwenza, ngesandla, kubomi bokwenyani.
Iimvavanyo zeeyunithi zineentsingiselo ezimbini. Ngokubanzi, unokufumanisa ukuba naluphi na uvavanyo oluzenzekelayo lubizwa ngokuba "luvavanyo lweeyunithi" kwaye yonke inkqubo inokubizwa ngokuba "uvavanyo lweeyunithi". Kodwa kumxholo wokusebenza ngokuchasene neyunithi, le nkqubo imalunga nokuvavanya iyunithi ethile engeyiyo yoluntu yekhowudi, ngokuzimeleyo. Umzekelo, uneklasi yeLaravel kunye nendlela yokubala into ethile, njengexabiso elipheleleyo lomyalelo kunye neeparamitha. Ngoko ke, uvavanyo lweyunithi luya kuchaza ukuba ngaba iziphumo ezichanekileyo zibuyiswa kuloo ndlela (iyunithi yekhowudi), kunye neeparamitha ezahlukeneyo.
Ukwenza uvavanyo lweyunithi, kufuneka udibanise iflegi:
php artisan make:test OrderPriceTest --unit
Ikhowudi eyenziweyo iyafana novavanyo lweyunithi yangaphambilidefiInkqubo yeLaravel:
class OrderPriceTest extends TestCase
{
public function test_example()
{
$this->assertTrue(true);
}
}
Njengoko ubona, ayikho RefreshDatabase
, kwaye le yenye ye defieyona ixhaphakileyo iinkcazelo zovavanyo lweyunithi: ayichukumisi isiseko sedatha, isebenza "njengebhokisi emnyama", ebekwe yodwa kwisicelo esisebenzayo.
Ukuzama ukuxelisa lo mzekelo bendiwukhankanye ngaphambilana, masithi sineklasi yenkonzo OrderPrice
.
app/Services/OrderPriceService.php:
class OrderPriceService
{
public function calculatePrice($productId, $quantity, $tax = 0.0)
{
// Some kind of calculation logic
}
}
Emva koko, uvavanyo lweyunithi lunokujongeka ngolu hlobo:
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
}
Kumava am obuqu kunye neeprojekthi zeLaravel, uninzi lovavanyo luvavanyo lweNdawo, hayi iimvavanyo zeYunithi. Okokuqala, kufuneka uvavanye ukuba ingaba isicelo sakho siyasebenza na, indlela abantu bokwenyani abanokusisebenzisa ngayo.
Okulandelayo, ukuba unezibalo ezikhethekileyo okanye ingqiqo unako definire njengeyunithi, kunye neeparamitha, ungadala iimvavanyo zeyunithi ngokukodwa oko.
Ngamanye amaxesha, iimvavanyo zokubhala zifuna ukuguqulwa kwekhowudi ngokwayo kunye nokuphinda kulungiswe ukuze kuyenze "ivavanywe" ngakumbi: ukwahlula iiyunithi kwiiklasi ezikhethekileyo okanye iindlela.
Yintoni eyona nto isetyenziswayo php artisan test
, kufuneka uyiqhube nini?
Kukho iindlela ezahlukeneyo, kuxhomekeke ekuhambeni komsebenzi wakho weshishini, kodwa ngokubanzi kufuneka uqinisekise ukuba zonke iimvavanyo "ziluhlaza" (oko kukuthi azinampazamo) ngaphambi kokuba utyhale utshintsho lokugqibela lwekhowudi kwindawo yokugcina.
Emva koko, usebenza kwindawo yakho kumsebenzi wakho, kwaye xa ucinga ukuba ugqibile, qhuba ezinye iimvavanyo ukuqinisekisa ukuba awophulanga nto. Khumbula, ikhowudi yakho inokubangela ii-bugs kungekuphela kwingqiqo yakho kodwa ukwaphule ngokungeyonjongo enye indlela yokuziphatha kwikhowudi yomnye umntu eyabhalwa kudala.
Ukuba sithatha inyathelo eliya phambili, kunokwenzeka ukuzenzela ezininzi izinto. Ngezixhobo ezahlukeneyo zeCI/CD, ungakhankanya iimvavanyo ekufuneka ziqhube nanini na umntu etyhala utshintsho kwisebe elithile leGit okanye phambi kokudibanisa ikhowudi kwisebe lemveliso. Eyona ndlela ilula yokuhamba iya kuba kukusebenzisa i-Github Actions, ndinayo ividiyo eyahlukileyo engqina oko.
Kukho iimbono ezahlukeneyo malunga nokuba inkulu kangakanani into ebizwa ngokuba "yi-test coverage": zama yonke imisebenzi enokwenzeka kunye nemeko kwiphepha ngalinye, okanye unciphise umsebenzi kwiindawo ezibaluleke kakhulu.
Ngapha koko, kulapho ndivumelana khona nabantu abatyhola uvavanyo oluzenzekelayo lokuthatha ixesha elingakumbi kunokubonelela ngenzuzo yokwenyani. Oku kunokwenzeka ukuba ubhala iimvavanyo kuzo zonke iinkcukacha. Oko kwathiwa, kunokufunwa yiprojekthi yakho: umbuzo oyintloko "yintoni ixabiso lempazamo enokwenzeka".
Ngamanye amazwi, kufuneka ubeke phambili iinzame zakho zovavanyo ngokubuza umbuzo "Kuya kwenzeka ntoni ukuba le khowudi ayiphumelelanga?" Ukuba inkqubo yakho yentlawulo ineempazamo, iya kuba nefuthe ngokuthe ngqo kwishishini. Ke ukuba ukusebenza kwendima / iimvume zakho zophukile, lo ngumba omkhulu wokhuseleko.
Ndiyayithanda indlela uMat Stauffer ayibeka ngayo kwinkomfa: "Kufuneka uqale uvavanye ezo zinto, ukuba ziyasilela, zingakugxotha emsebenzini wakho." Ewe oko kukuzibaxa, kodwa ufumana umbono: zama izinto ezibalulekileyo kuqala. Kwaye ke ezinye iimpawu, ukuba unexesha.
Yonke le mizekelo ingentla isekwe kwisixhobo sovavanyo sangaphambili seLaraveldefiNONE PHPUnithi . Kodwa ekuhambeni kweminyaka ezinye izixhobo ziye zavela kwi-ecosystem kwaye enye yezona zidumileyo zamva nje UTSHINTSHO . Yenziwe ngumsebenzi osemthethweni waseLaravel UNuno Maduro , ijolise ekwenzeni lula i-syntax, ukwenza ikhowudi yokubhala kwiimvavanyo ngokukhawuleza.
Ngaphantsi kwe-hood, iyabaleka su I-PHPUUnit, njengomaleko ongezelelweyo, ukuzama nje ukunciphisa ezinye iindawo eziphindwe kabinidefiumzuzu wekhowudi yePHUnit.
Makhe sijonge umzekelo. Khumbula iklasi yovavanyo lwangaphambilidefiwazalelwa eLaravel? Ndiya kukukhumbuza:
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);
}
}
Ngaba uyazi ukuba uvavanyo olufanayo luya kujongeka njani nge-PEST?
test('the application returns a successful response')->get('/')->assertStatus(200);
Ewe, OMNYE umgca wekhowudi kwaye yiloo nto. Ke, injongo ye-PEST kukususa umphezulu we:
Ukwenza uvavanyo lwe-PEST kwiLaravel, kufuneka uchaze iflegi eyongezelelweyo:
php artisan make:test HomepageTest --pest
Ukuza kuthi ga ngoku kubhalwa, i-PEST idume kakhulu phakathi kwabaphuhlisi beLaravel, kodwa kukhetho lwakho lobuqu ukuba usebenzise esi sixhobo songezelelweyo kwaye ufunde i-syntax yaso, kunye nenqaku le-PHUnit.
BlogInnovazione.it
Ukuphuhlisa izakhono zemoto ngokufaka imibala kulungiselela abantwana izakhono ezinzima ezifana nokubhala. Ukufaka umbala...
Icandelo lomkhosi wasemanzini ligunya lokwenyani loqoqosho lwehlabathi, elithe lajonga kwimarike ye-150 yeebhiliyoni...
NgoMvulo ophelileyo, i-Financial Times ibhengeze isivumelwano kunye ne-OpenAI. I-FT ikhupha iilayisensi kubuntatheli bayo obukumgangatho wehlabathi…
Izigidi zabantu zihlawula iinkonzo zokusasaza, zihlawula umrhumo wenyanga. Luluvo oluqhelekileyo ukuba…