Ina tae mai ki nga whakamatautau aunoa, ki nga whakamatautau wae ranei, i roto i tetahi reo whakamaoritanga, e rua nga whakaaro whakahē:
Na, me tenei tuhinga ka ngana taatau ki te whakapae i nga mea o mua, ina koa ma te whakaatu i te ngawari o te tiimata me te whakamatautau aunoa i Laravel.
Tuatahi me korero tatou mo te "he aha", katahi ka kite i etahi tauira o te pehea.
Ka whakahaerehia e nga whakamatautau aunoa etahi waahanga o te waehere me te whakaatu i nga hapa. Koinei te huarahi ngawari ki te whakaahua i a raatau. Whakaarohia te huri i tetahi waahanga hou i roto i tetahi taupānga, katahi ka haere tetahi kaiawhina karetao whaiaro ki te whakamatau a-ringa i te waahanga hou, me te whakamatautau ano mena kaore te waehere hou i pakaru i tetahi o nga ahuatanga tawhito.
Ko te painga nui tenei: te whakamatautau aunoa i nga ahuatanga katoa. He mahi ano tenei, engari ki te kore koe e kii ki te "robot" ki te mahi, me mahi a ringa ano, tika?
Ka taea ranei te tuku i nga ahuatanga hou me te kore e whakamatau mena ka mahi, me te tumanako ka tukuna e nga kaiwhakamahi nga pepeke.
He maha nga painga ka taea e nga whakamatautau aunoa:
Whakamātauria ki te whakaaro i to tono i roto i te tau, e rua ranei, me nga kaiwhakawhanake hou i runga i te roopu karekau e mohio ki te waehere i tuhia i nga tau o mua, me pehea ranei te whakamatautau.
Hei mahi i te tuatahi whakamatautau aunoa i Laravel, kaore koe e hiahia ki te tuhi i tetahi waehere. Ae, tika taau korero. Ko nga mea katoa kua oti te whakarite me te whakarite i mua i te whakaurungadefio Laravel, tae atu ki te tauira taketake tuatahi.
Ka taea e koe te ngana ki te whakauru i tetahi kaupapa Laravel ka whakahaere tonu i nga whakamatautau tuatahi:
laravel new project
cd project
php artisan test
Koinei te hua i roto i to papatohu:
Mena ka titiro tatou ki te muadefite ahiahi o Laravel /tests
, e rua nga konae:
whakamātautau/Ahuatanga/ExampleTest.php :
class ExampleTest extends TestCase
{
public function test_the_application_returns_a_successful_response()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
Kare koe e hiahia ki te mohio ki tetahi wetereo kia mohio ai koe ki nga mea kei konei: utaina te wharangi kaainga ka tirohia mena ko te waehere mana HTTP
è "200 OK
".
E mohiotia ana ko te ingoa tikanga test_the_application_returns_a_successful_response()
ka noho hei tuhinga panui ina tiro koe i nga hua whakamatautau, ma te whakakapi noa i te tohu tararo ki te mokowā.
tests/Unit/ExampleTest.php :
class ExampleTest extends TestCase
{
public function test_that_true_is_true()
{
$this->assertTrue(true);
}
}
He ahua horihori noa iho, ka tirohia mena he pono tenei?
Ka korero motuhake tatou mo nga whakamatautau wae a muri ake nei. I tenei wa, me maarama koe he aha te nuinga o nga mahi i ia whakamatautau.
/tests
he akomanga PHP e whakawhānui ana i te TestCase o PHPUnitKo te hanganga, koira noa nga mea e hiahia ana koe ki te mohio, ko era atu mea katoa kei runga i nga mea tika e hiahia ana koe ki te whakamatautau.
Hei whakaputa i te karaehe whakamatautau kau, whakahaere noa i tenei whakahau:
php artisan make:test HomepageTest
Ka hangaia te konae 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);
}
}
Inaianei kia kite tatou ka aha mena kaore nga whakapae whakamatautau e whakahoki mai i te hua e tumanakohia ana.
Me huri nga tauira whakamatautau ki tenei:
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);
}
}
Na inaianei, ki te whakahaere tatou i te whakahau php artisan test
ano:
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
E rua nga whakamatautau i rahua, kua tohua he FAIL, me nga whakamarama kei raro me nga pere e tohu ana ki te rarangi tika o nga whakamatautau i rahua. Ka tohuhia nga hapa penei.
Ki te mea he puka ta maatau me whakamatau i nga momo keehi: ka tirohia mena ka rahua me nga raraunga muhu, ka tirohia mena ka angitu me te whakauru tika, aha atu.
Ko te kete timata mana na Laravel Breeze kei roto i te whakamatautau i nga mahi kei roto. Kia titiro tatou ki etahi tauira mai i reira:
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);
}
}
I konei e rua nga whakamatautau i roto i te karaehe kotahi, i te mea he hononga enei e rua ki te puka rehitatanga: ka tirohia e tetahi mehemea kua tika te utaina o te puka, ka tirohia e tetahi mena ka pai te mahi o te tukunga.
Kia mohio tatou ki etahi atu tikanga e rua mo te manatoko i te hua, e rua ano nga whakapae: $this->assertAuthenticated()
e $response->assertRedirect()
. Ka taea e koe te tirotiro i nga korero katoa e waatea ana i roto i nga tuhinga mana o PHPUnit e Te Whakautu a Laravel . Kia mahara ka puta etahi korero whanui mo te kaupapa $this
, ko etahi e tirotiro ana i nga mea motuhake $response
mai i te waea ara.
Ko tetahi atu mea nui ko te use RefreshDatabase;
tauākī, me te whiu, kua kuhu ki runga ake o te akomanga. He mea tika ina pa ana nga mahi whakamatautau ki te paataka raraunga, penei i tenei tauira, ka taapirihia e te takiuru he urunga hou ki te users
ripanga pātengi raraunga. Mo tenei, me hanga e koe he papaunga raraunga whakamatautau motuhake ka whakahouhia php artisan migrate:fresh
i nga wa katoa ka whakahaerehia nga whakamatautau.
E rua nga whiringa: te hanga-a-tinana i tetahi patengi raraunga motuhake, te whakamahi ranei i te putunga raraunga SQLite i roto i te mahara. Kua whirihorahia nga mea e rua i roto i te konae phpunit.xml
ka whakaratohia ma te taunoadefinita me Laravel. Inaa, ka hiahia koe ki tenei waahanga:
<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>
Tirohia te DB_CONNECTION
e DB_DATABASE
ko ēhea e kōrerohia ana? Mena kei a koe te SQLite i runga i to tuumau, ko te mahi ngawari ko te whakakore noa i aua rarangi ka rere o whakamatautau ki taua putunga mahara-mahara.
I roto i tenei whakamatautau e kii ana matou kua pai te whakamotuhēhēnga o te kaiwhakamahi ka tukuna ki te wharangi kaainga tika, engari ka taea ano e matou te whakamatautau i nga raraunga tuuturu i roto i te paataka raraunga.
I tua atu i tenei waehere:
$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);
Ka taea hoki e tatou te whakamahi nga whakapae mo te whakamatautau i te papaunga raraunga ka mahi i tetahi mea penei:
$this->assertDatabaseCount('users', 1);
// Or...
$this->assertDatabaseHas('users', [
'email' => 'test@example.com',
]);
Kia kite tatou i tetahi atu tauira o te whaarangi Takiuru me Laravel 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();
}
}
Mo te puka takiuru. He rite te arorau ki te rehitatanga, tika? Engari e toru nga tikanga hei utu mo te rua, no reira he tauira tenei mo te whakamatautau i nga ahuatanga pai me te kino. Na, ko te arorau noa me whakamatau koe i nga keehi e rua: ka pai te haere me te kore e taka.
Ano, ko nga mea e kite ana koe i tenei whakamatautau ko te whakamahinga o Nga wheketere Raraunga Raraunga : Ka hangaia e Laravel he kaiwhakamahi rūpahu ( ano, i runga i to papaunga raraunga whakamatautau kua whakahoutia ) ka ngana ki te takiuru, me nga tohu tika, hē ranei.
Ano ano, ka hangaia e Laravel te wheketere o muadefinita me nga raraunga teka mo te User
tauira, i waho o te pouaka.
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),
];
}
}
Kei te kite koe, e hia nga mea kua whakaritea e Laravel ake, no reira he ngawari noa ma tatou ki te timata ki te whakamatautau?
Na ki te mahia e tatou php artisan test
i muri i te whakauru i a Laravel Breeze, me kite tatou i tetahi mea penei:
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
Kua kite koe i nga kōpakiroto tests/Feature
e tests/Unit
?.
He aha te rereketanga i waenga i a raatau?
I te ao, kei waho o te rauwiringa kaiao Laravel/PHP, he maha nga momo whakamatautau aunoa. Ka kitea e koe nga kupu penei:
He uaua te ahua, a ko nga rereketanga i waenga i enei momo whakamatautau ka pohehe i etahi wa. Koia te take i whakangawarihia e Laravel enei kupu rangirua katoa, ka whakarōpūtia kia rua: wae/ahuatanga.
Me korero noa, ka ngana nga whakamatautau ahua ki te mahi i nga mahi o o tono: tikina te URL, waea atu ki te API, peehia te ahua tika penei i te whakakii i te puka. He rite, he rite ranei nga mahi a nga whakamatautau ahua ki te mahi a tetahi kaiwhakamahi kaupapa, a-ringa, i roto i te ao.
E rua nga tikanga o nga whakamatautau wae. I te nuinga o te waa, ka kitea pea ka kiia tetahi whakamatautau aunoa ko te "whakamatautau wae" ka kiia te katoa ko te "whakamatautau wae". Engari i roto i te horopaki o te taumahinga me te waeine, ko tenei tukanga e pa ana ki te whakamatautau i tetahi waeine kore-iwi motuhake o te waehere, mo te wehe. Hei tauira, kei a koe he akomanga Laravel me tetahi tikanga e tatau ana i tetahi mea, penei i te utu ota katoa me nga tawhā. No reira, ma te whakamatautau wae e whakaatu mena ka whakahokia mai nga hua tika mai i tera tikanga (waewae waehere), he rereke nga tawhā.
Hei whakaputa i tetahi whakamatautau wae, me taapiri he haki:
php artisan make:test OrderPriceTest --unit
He rite te waehere i hangaia ki te whakamatautau waeine o muadefiPūnaha Laravel:
class OrderPriceTest extends TestCase
{
public function test_example()
{
$this->assertTrue(true);
}
}
Ka kite koe, karekau RefreshDatabase
, a koinei tetahi o defite nuinga o nga whakamaramatanga whakamatautau waeine: kaore e pa ki te paataka, ka mahi hei "pouaka pango", ka wehea mai i te tono rere.
Ma te tamata i te pee i te hi‘oraa ta ’u i faahiti na mua ’tu, e mana‘o ana‘e e e piha taviniraa ta tatou OrderPrice
.
app/Services/OrderPriceService.php:
class OrderPriceService
{
public function calculatePrice($productId, $quantity, $tax = 0.0)
{
// Some kind of calculation logic
}
}
Na, ka penei pea te ahua o te whakamatautau wae:
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
}
I roto i taku wheako whaiaro me nga kaupapa Laravel, ko te nuinga o nga whakamatautau he whakamatautau Whakaaturanga, ehara i nga whakamatautau Waehe. Tuatahi, me whakamatau koe mena ka mahi to tono, me pehea te whakamahi a te tangata pono.
I muri mai, mena kei a koe he tatauranga motuhake, arorau ranei ka taea e koe definire hei waeine, me nga tawhā, ka taea e koe te hanga whakamatautau wae mo tera.
I etahi wa, ko nga whakamatautau tuhi me whakarereke i te waehere ake me te whakahou ano kia pai ake ai te "whakamatautau": wehe i nga waahanga ki nga karaehe, tikanga motuhake ranei.
He aha te tino whakamahinga o tenei php artisan test
, ahea me whakahaere koe?
He rereke nga huarahi, i runga i to rerenga mahi pakihi, engari ko te tikanga me whakarite e koe he "matomato" nga whakamatautau katoa (arā, he hapa-kore) i mua i te pana i nga huringa waehere whakamutunga ki te putunga.
Na, ka mahi koe i to rohe mo to mahi, a ka whakaaro koe kua oti koe, whakahaere etahi whakamatautau kia mohio ai kaore koe i pakaru tetahi mea. Kia maumahara, ko to waehere ka puta he pepeke ehara i te mea i roto i to arorau anake engari ka pakaru pohehe ano etahi atu whanonga i roto i te waehere a tetahi atu i tuhia i mua.
Mena ka neke ake taatau, ka taea te mahi aunoa maha mea. Ma nga momo taputapu CI/CD, ka taea e koe te whakarite i nga whakamatautau kia whakahaere i nga wa ka panaia e te tangata nga huringa ki tetahi peka Git motuhake, i mua ranei i te hanumi waehere ki te peka whakaputa. Ko te rerengamahi ngawari ko te whakamahi i nga Mahi a Github, kei a au he ataata motuhake e whakaatu ana.
He rereke nga whakaaro mo te nui o te mea e kiia nei ko te "whakamatautau": whakamatauria nga mahi katoa me nga keehi kei runga i ia wharangi, whakawhāitihia ranei te mahi ki nga waahanga tino nui.
Inaa, koinei taku whakaae ki nga tangata e whakapae ana i nga whakamatautau aunoa mo te wa roa atu i te whai hua pono. Ka puta tenei ki te tuhi koe i nga whakamatautau mo ia taipitopito. E ai ki tera, ka hiahiatia pea e to kaupapa: ko te patai matua "he aha te utu mo te hapa pea".
I etahi atu kupu, me whakarite e koe nga mahi whakamatautau ma te patai i te patai "Ka aha mena ka rahua tenei waehere?" Mena he hapa to punaha utu, ka pa ki te pakihi. Na, ki te pakaru te mahi o o mahi/whakaaetanga, he take haumarutanga nui tenei.
He pai ki ahau te korero a Matt Stauffer i tetahi huihuinga: "Me whakamatau tuatahi koe i nga mea, mena ka taka, ka peia koe i to mahi." Ko te tikanga he whakanuia tera, engari ka whiwhi koe i te whakaaro: whakamatau i nga mea nui i te tuatahi. Na etahi atu waahanga, mena he wa koe.
Ko nga tauira katoa i runga ake nei ka ahu mai i te taputapu whakamatautau o mua o Laraveldefiahiahi: PHPUnit . Engari i roto i nga tau kua puta etahi atu taputapu i roto i te rauwiringa kaiao me tetahi o nga mea rongonui hou ko PĀTAI . I hangaia e te kaimahi mana o Laravel Nuno Maduro , e whai ana ki te whakangawari i te wetereo, kia tere ake te tuhi tohu mo nga whakamatautau.
I raro i te kaapu, ka rere su PHPUnit, hei paparanga taapiri, e ngana ana ki te whakaiti i etahi waahanga i mua i te tukuruadefite mutunga o te waehere PHPUnit.
Ka titiro tatou ki tetahi tauira. Kia mahara ki te karaehe whakamatautau o muadefii roto i Laravel? Ka whakamahara ahau ki a koe:
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);
}
}
Kei te mohio koe he aha te ahua o te whakamatautau mo PEST?
test('the application returns a successful response')->get('/')->assertStatus(200);
Ae, KOTAHI rarangi waehere katahi ano. Na, ko te whainga o PEST ko te tango i te utu o:
Hei whakaputa i tetahi whakamatautau PEST ki Laravel, me tohu he haki taapiri:
php artisan make:test HomepageTest --pest
I tenei wa e tuhi ana, he tino rongonui a PEST i waenga i nga kaiwhakawhanake Laravel, engari nau ake te hiahia ki te whakamahi i tenei taputapu taapiri me te ako i tana wetereo, me te tuhipoka PHPUnit.
BlogInnovazione.it
Ko te whakawhanake i nga pukenga motuka pai na roto i te tae ka whakarite i nga tamariki mo nga pukenga uaua ake penei i te tuhi. Ki te tae…
Ko te waahanga moana he mana ohaoha pono o te ao, kua whakatere ki te maakete 150 piriona ...
I te Mane kua hipa, i panuitia e te Financial Times tetahi mahi me OpenAI. Ka raihana a FT i tana kairipoata o te ao…
E hia miriona nga taangata e utu ana mo nga ratonga rerema, e utu ana i nga utu ohaurunga ia marama. Ko te whakaaro noa ko koe…