مقالات

سکو ته Laravel ۾ ٽيسٽ ڪيئن ڪجي سادي مثالن سان، PHPUnit ۽ PEST استعمال ڪندي

جڏهن اهو اچي ٿو خودڪار ٽيسٽ يا يونٽ ٽيسٽ، ڪنهن به پروگرامنگ ٻولي ۾، اتي ٻه مخالف رايا آهن:

  • وقت جو زيان
  • توهان ان کان سواء نٿا ڪري سگهو

تنهن ڪري، هن آرٽيڪل سان اسان اڳوڻي کي قائل ڪرڻ جي ڪوشش ڪنداسين، خاص طور تي اهو ظاهر ڪندي ته Laravel ۾ خودڪار ٽيسٽ سان شروع ڪرڻ ڪيترو آسان آهي.

پهرين اچو ته ”ڇو“ جي باري ۾ ڳالهايون، ۽ پوءِ اچو ته ان جا ڪي مثال ڏسون.

ڇو اسان کي خودڪار ٽيسٽ جي ضرورت آهي

خودڪار ٽيسٽ ڪوڊ جا حصا هلائيندا آهن ۽ ڪنهن به غلطي جي رپورٽ ڪن ٿا. اھو انھن کي بيان ڪرڻ جو آسان طريقو آھي. تصور ڪريو هڪ ايپ ۾ هڪ نئين فيچر کي رول آئوٽ ڪيو، ۽ پوءِ هڪ پرسنل روبوٽ اسسٽنٽ ويندو ۽ دستي طور تي نئين فيچر کي ٽيسٽ ڪندو، جڏهن ته اهو پڻ جانچيندو ته ڇا نئون ڪوڊ ڪنهن به پراڻي فيچر کي ٽوڙي نه سگهيو آهي.

هي بنيادي فائدو آهي: خودڪار طريقي سان سڀني خاصيتن کي ٻيهر جانچڻ. اهو لڳي سگهي ٿو اضافي ڪم وانگر، پر جيڪڏهن توهان "روبوٽ" کي اهو ڪرڻ لاء نه ٻڌايو، اسان کي متبادل طور تي دستي طور تي ڪرڻ گهرجي، صحيح؟ 

يا نوان فيچرز جاري ڪري سگھجن ٿا بغير جاچ ڪرڻ جي ته ڇا اهي ڪم ڪن ٿا، اميد آهي ته صارفين کي بگ رپورٽ ڪندا.

خودڪار ٽيسٽ اسان کي ڪيترائي فائدا ڏئي سگھن ٿا:

  • دستي جاچ وقت بچايو؛
  • اهي توهان کي وقت بچائڻ جي اجازت ڏين ٿا ٻنهي تي لاڳو ٿيل نئين فنڪشن تي ۽ رجعت کان پاسو ڪندي گڏيل افعال تي؛
  • ھن فائدي کي سڀني نون خصوصيتن سان ضرب ڪريو ۽ سڀ خصوصيتون جيڪي اڳ ۾ لاڳو ٿيل آھن؛
  • پوئين ٽي نقطا هر نئين ورزن تي لاڳو ٿين ٿا؛
  • ...

ڪوشش ڪريو پنھنجي ايپليڪيشن کي ھڪ يا ٻن سالن ۾ تصور ڪرڻ جي، ٽيم ۾ نون ڊولپرز سان جيڪي نه ڄاڻندا آھن گذريل سالن ۾ لکيل ڪوڊ، يا ان کي ڪيئن آزمايو وڃي. 

اسان جي پهرين خودڪار ٽيسٽ

پهرين انجام ڏيڻ Laravel ۾ خودڪار جاچ، توهان کي ڪو به ڪوڊ لکڻ جي ضرورت ناهي. ها، توهان اهو صحيح پڙهيو. سڀڪنھن شيء کي اڳ ۾ ئي ترتيب ۽ اڳ ۾ انسٽاليشن ۾ تيار آهيdefiLaravel جي رات، جنهن ۾ تمام پهريون بنيادي مثال شامل آهي.

توهان ڪوشش ڪري سگهو ٿا هڪ Laravel پروجيڪٽ کي نصب ڪرڻ ۽ فوري طور تي پهرين ٽيسٽ کي هلائڻ:

laravel new project
cd project
php artisan test

اهو توهان جي ڪنسول ۾ نتيجو هجڻ گهرجي:

جيڪڏهن اسان اڳ ۾ هڪ نظر وٺوdefiLaravel جي رات /testsاسان وٽ ٻه فائلون آهن:

tests/Feature/ExampleTest.php :

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

هتي ڇا ٿي رهيو آهي اهو سمجهڻ لاءِ توهان کي ڪنهن به نحو کي ڄاڻڻ جي ضرورت ناهي: هوم پيج لوڊ ڪريو ۽ چيڪ ڪريو ته اسٽيٽس ڪوڊ HTTP è ”200 OK".

طريقي جي نالي سان پڻ سڃاتو وڃي ٿو test_the_application_returns_a_successful_response() پڙهڻ جي قابل متن ٿي ويندو آهي جڏهن توهان امتحان جا نتيجا ڏسندا آهيو، صرف هيٺ ڏنل علامت کي جاءِ سان مٽائڻ سان.

tests/Unit/ExampleTest.php :

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

ٿورڙي بيڪار لڳي ٿي، ڏسڻ لاءِ ته ڇا اهو سچ آهي؟ 

اسان خاص طور تي يونٽ ٽيسٽ بابت ٿوري دير بعد ڳالهائينداسين. ھاڻي توھان کي سمجھڻ جي ضرورت آھي ته عام طور تي ھر ٽيسٽ ۾ ڇا ٿيندو آھي.

  • فولڊر ۾ هر ٽيسٽ فائل /tests هڪ پي ايڇ پي ڪلاس آهي جيڪو وڌائي ٿو TestCase of پي ايڇ يوٽيوٽ
  • هر طبقي جي اندر، توهان ڪيترن ئي طريقن کي ٺاهي سگهو ٿا، عام طور تي هڪ طريقو هڪ صورتحال لاء ٽيسٽ ڪرڻ لاء
  • هر طريقي ۾ ٽي ڪارناما آهن: صورتحال کي تيار ڪرڻ، پوء قدم کڻڻ ۽ پوء تصديق ڪرڻ (تصديق ڪرڻ) ڇا نتيجو توقع جي مطابق آهي.

ساخت جي طور تي، اهو سڀ ڪجهه توهان کي ڄاڻڻ جي ضرورت آهي، باقي سڀ ڪجهه ان تي منحصر آهي جيڪي توهان کي جانچڻ چاهيو ٿا.

خالي ٽيسٽ ڪلاس ٺاهڻ لاءِ، بس ھي حڪم ھلايو:

php artisan make:test HomepageTest

فائل ٺاهي وئي آهي 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);
    }
}

هاڻي اچو ته ڏسو ته ڇا ٿيندو جيڪڏهن هڪ ٽيسٽ ڪوڊ Laravel ۾ ناڪام ٿئي

اچو ته هاڻي ڏسون ته ڇا ٿيندو جيڪڏهن ٽيسٽ جي دعويٰ متوقع نتيجو نه موٽائي.

اچو ته مثال جي ٽيسٽ کي تبديل ڪريون:

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);
    }
}

۽ هاڻي، جيڪڏهن اسان حڪم هلائي php artisan test ٻيهر:

 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

اتي ٻه ناڪام ٽيسٽون آھن، جن کي FAIL طور نشان لڳايو ويو آھي، ھيٺ ڏنل وضاحتن سان ۽ تير جا نشان آھن جيڪي ٽيسٽن جي صحيح لڪير ڏانھن اشارو ڪندا آھن جيڪي ناڪام ٿيا. غلطيون هن طريقي سان ظاهر ڪيون ويون آهن.

مثال: ٽيسٽنگ رجسٽريشن فارم ڪوڊ Laravel ۾

فرض ڪريو اسان وٽ ھڪڙو فارم آھي ۽ اسان کي مختلف ڪيسن کي جانچڻ جي ضرورت آھي: اسان چيڪ ڪريون ٿا ته اھو غلط ڊيٽا سان ناڪام ٿئي ٿو، اسان چيڪ ڪريون ٿا ته اھو صحيح ان پٽ سان ڪامياب ٿئي ٿو، وغيره.

سرڪاري اسٽارٽر کٽ Laravel Breeze پاران i شامل آهن ان جي اندر ڪارڪردگي جي جانچ ڪندي. اچو ته ان مان ڪجهه مثال ڏسون:

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);
    }
}

هتي اسان وٽ هڪ ڪلاس ۾ ٻه ٽيسٽون آهن، ڇاڪاڻ ته اهي ٻئي رجسٽريشن فارم سان لاڳاپيل آهن: هڪ چيڪ ڪري ٿو ته فارم صحيح طريقي سان لوڊ ڪيو ويو آهي ۽ ٻيو چيڪ ڪري ٿو ته جمع ڪرائڻ سٺو ڪم ڪري ٿو.

اچو ته نتيجي جي تصديق لاءِ ٻن وڌيڪ طريقن سان واقف ٿي وڃون، ٻه وڌيڪ دعويٰ: $this->assertAuthenticated()$response->assertRedirect(). توھان چيڪ ڪري سگھوٿا سڀ دعوائون موجود سرڪاري دستاويزن ۾ پي ايڇ يوٽيوٽ e Laravel جواب . نوٽ ڪريو ته ڪجھ عام دعوائون موضوع تي ٿين ٿيون $this، جڏهن ته ٻيا مخصوص چيڪ ڪريو $responseرستي جي ڪال کان.

ٻي اهم ڳالهه اها آهي use RefreshDatabase;بيان، اسٽروڪ سان، ڪلاس جي مٿان داخل ڪيو ويو. اهو ضروري آهي جڏهن ٽيسٽ ڪارناما ڊيٽابيس کي متاثر ڪري سگهن ٿا، جيئن هن مثال ۾، لاگنگ ۾ هڪ نئين داخلا شامل ڪري ٿي. usersڊيٽابيس ٽيبل. ان لاءِ، توهان کي هڪ الڳ ٽيسٽ ڊيٽابيس ٺاهڻ گهرجي جنهن سان تازه ڪاري ڪئي ويندي php artisan migrate:freshهر وقت ٽيسٽ هلائي رهيا آهن.

توھان وٽ ٻه اختيار آھن: جسماني طور تي ھڪڙو الڳ ڊيٽابيس ٺاھيو يا ان-ميموري SQLite ڊيٽابيس استعمال ڪريو. ٻئي فائل ۾ ترتيب ڏنل آهن phpunit.xmlڊفالٽ طرفان مهيا ڪيلdefiنيتا سان Laravel. خاص طور تي، توھان کي ھن حصي جي ضرورت آھي:

<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>

ڏسو DB_CONNECTIONDB_DATABASEجن تي تبصرا ڪيا ويا آهن؟ جيڪڏهن توهان وٽ توهان جي سرور تي SQLite آهي، آسان ترين عمل صرف انهن لائنن کي غير معمولي ڪرڻ آهي ۽ توهان جا تجربا انهي ميموري ڊيٽابيس جي خلاف هلندا.

هن ٽيسٽ ۾ اسان چئون ٿا ته صارف ڪاميابي سان تصديق ڪئي وئي آهي ۽ صحيح هوم پيج ڏانهن ريڊائريڪٽ ڪيو ويو آهي، پر اسان ڊيٽابيس ۾ حقيقي ڊيٽا کي پڻ جانچي سگهون ٿا.

هن ڪوڊ کان علاوه:

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

اسان پڻ استعمال ڪري سگهون ٿا ڊيٽابيس ٽيسٽ دعويٰ ۽ ڪجھ ھن طرح ڪريو:

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

لاگ ان صفحي جو مثال

اچو ته هاڻي 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();
    }
}

اهو لاگ ان فارم جي باري ۾ آهي. منطق رجسٽريشن وانگر آهي، صحيح؟ پر ٻن جي بدران ٽي طريقا، تنهن ڪري هي هڪ مثال آهي ٻنهي سٺين ۽ خراب حالتن کي جانچڻ جو. تنهن ڪري، عام منطق اهو آهي ته توهان کي ٻنهي صورتن کي جانچڻ گهرجي: جڏهن شيون ٺيڪ ٿي وڃن ۽ جڏهن اهي ناڪام ٿين.

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

انهي سان گڏ، توهان هن امتحان ۾ ڇا ڏسي رهيا آهيو جو استعمال آهي ڊيٽابيس فيڪٽريز : Laravel جعلي صارف ٺاهي ٿو ( ٻيهر، توهان جي تازه ڪاري ٽيسٽ ڊيٽابيس تي ) ۽ پوءِ لاگ ان ڪرڻ جي ڪوشش ڪري ٿو، صحيح يا غلط سندن سان.

هڪ ڀيرو ٻيهر، Laravel فيڪٽري اڳ پيدا ڪري ٿوdefinita لاء غلط ڊيٽا سان Userماڊل، دٻي کان ٻاهر.

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),
        ];
    }
}

توهان ڏسو، ڪيتريون شيون پاڻ Laravel پاران تيار ڪيون ويون آهن، پوء ڇا اسان لاء ٽيسٽ شروع ڪرڻ آسان ٿيندو؟

پوء جيڪڏھن اسين عمل ڪريون php artisan testLaravel Breeze انسٽال ڪرڻ کان پوء، اسان کي ڪجهه ڏسڻ گهرجي:

 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

يونٽ ٽيسٽ ۽ ٻين جي مقابلي ۾ فنڪشنل ٽيسٽ

توھان ڏٺو آھي ذيلي فولڊر tests/Feature e tests/Unit ?. 

انهن جي وچ ۾ ڪهڙو فرق آهي؟ 

عالمي طور تي، Laravel / PHP ايڪو سسٽم کان ٻاهر، اتي ڪيترائي قسم جا خودڪار ٽيسٽ آهن. توھان اھڙا لفظ ڳولي سگھو ٿا:

  • يونٽ ٽيسٽ
  • خاصيت جي جاچ
  • انضمام جا امتحان
  • فنڪشنل ٽيسٽ
  • آخر کان آخر تائين جاچ
  • قبوليت جا امتحان
  • تماڪ جا امتحان
  • وغيره

اهو پيچيده آواز آهي، ۽ انهن قسمن جي تجربن جي وچ ۾ حقيقي فرق ڪڏهن ڪڏهن ڦهليل آهن. اهو ئي سبب آهي ته Laravel انهن سڀني مونجهاري واري اصطلاحن کي آسان ڪيو آهي ۽ انهن کي ٻن حصن ۾ گروپ ڪيو آهي: يونٽ/خصوصيت.

آسان لفظ ۾، فيچر ٽيسٽون توهان جي ايپليڪيشنن جي حقيقي ڪارڪردگي کي انجام ڏيڻ جي ڪوشش ڪندا آهن: URL حاصل ڪريو، API کي ڪال ڪريو، صحيح رويي کي نقل ڪريو جيئن فارم ڀرڻ. فيچر ٽيسٽ عام طور تي ساڳيا يا ساڳيا آپريشن ڪندا آهن جيئن ڪو به پروجيڪٽ استعمال ڪندڙ، دستي طور، حقيقي زندگي ۾ ڪندو.

يونٽ ٽيسٽ جا ٻه مطلب آهن. عام طور تي، توهان اهو ڳولي سگهو ٿا ته ڪنهن به خودڪار ٽيسٽ کي "يونٽ ٽيسٽنگ" سڏيو ويندو آهي ۽ سڄي عمل کي "يونٽ ٽيسٽنگ" سڏيو ويندو آهي. پر يونٽ جي مقابلي ۾ ڪارڪردگي جي حوالي سان، اهو عمل هڪ مخصوص غير عوامي يونٽ ڪوڊ جي جانچ ڪرڻ بابت آهي، اڪيلائي ۾. مثال طور، توهان وٽ آهي Laravel ڪلاس هڪ طريقي سان جيڪو ڪجهه حساب ڪري ٿو، جهڙوڪ ڪل آرڊر جي قيمت پيرا ميٽرن سان. تنهن ڪري، يونٽ ٽيسٽ اهو ٻڌائيندو ته ڇا صحيح نتيجا انهي طريقي (ڪوڊ يونٽ) مان موٽايا ويا آهن، مختلف پيٽرولن سان.

هڪ يونٽ ٽيسٽ ٺاهڻ لاء، توهان کي هڪ پرچم شامل ڪرڻ جي ضرورت آهي:

php artisan make:test OrderPriceTest --unit

ٺاهيل ڪوڊ ساڳيو آهي جيئن اڳ يونٽ ٽيسٽdefiLaravel سسٽم:

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

جئين توهان ڏسي سگهو ٿا، اهو موجود ناهي RefreshDatabase، ۽ هي هڪ آهي defiسڀ کان عام يونٽ ٽيسٽ وصفون: اهو ڊيٽابيس کي هٿ نٿو اچي، اهو ڪم ڪري ٿو "ڪارو باڪس"، هلندڙ ايپليڪيشن کان الڳ ٿيل.

مثال جي نقل ڪرڻ جي ڪوشش ڪندي مون اڳ ۾ ذڪر ڪيو آهي، اچو ته تصور ڪريو اسان وٽ هڪ خدمت ڪلاس آهي OrderPrice.

app/Services/OrderPriceService.php:

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

پوء، يونٽ ٽيسٽ هن طرح ڪجهه نظر اچي سگهي ٿو:

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 منصوبن سان منهنجي ذاتي تجربي ۾، تجربن جي وڏي اڪثريت فيچر ٽيسٽ آهن، نه يونٽ ٽيسٽ. پهرين، توهان کي جانچڻ جي ضرورت آهي ته ڇا توهان جي ايپليڪيشن ڪم ڪري ٿي، طريقي سان حقيقي ماڻهو ان کي استعمال ڪندا.

اڳيون، جيڪڏهن توهان وٽ خاص حساب يا منطق آهي ته توهان ڪري سگهو ٿا definire هڪ يونٽ جي طور تي، پيرا ميٽرز سان، توهان خاص طور تي ان لاءِ يونٽ ٽيسٽ ٺاهي سگهو ٿا.

ڪڏهن ڪڏهن، ٽيسٽ لکڻ جي ضرورت آهي ڪوڊ کي پاڻ ۾ تبديل ڪرڻ ۽ ان کي ٻيهر ٺاهڻ لاءِ ان کي وڌيڪ ”ٽيسٽ لائق“ بنائڻ لاءِ: يونٽن کي خاص طبقن يا طريقن ۾ الڳ ڪرڻ.

جڏهن / ڪيئن ٽيسٽ انجام ڏيڻ لاء؟

هن جو اصل استعمال ڇا آهي php artisan testجڏهن توهان ان کي هلائڻ گهرجي؟

اتي مختلف طريقا آھن، توھان جي ڪاروباري ڪم جي فلو تي منحصر آھي، پر عام طور تي توھان کي پڪ ڪرڻ جي ضرورت آھي ته سڀ ٽيسٽون ”سبز“ (يعني غلطي کان پاڪ) آھن ان کان پھريائين جو آخري ڪوڊ تبديلين کي مخزن ۾ دٻايو وڃي.

پوء، توهان مقامي طور تي توهان جي ڪم تي ڪم ڪيو، ۽ جڏهن توهان سوچيو ته توهان مڪمل ڪيو آهي، پڪ ڪرڻ لاء ڪجهه ٽيسٽ هلائيندا آهيو ته توهان ڪجهه به نه ٽوڙيو آهي. ياد رکو، توهان جو ڪوڊ نه رڳو توهان جي منطق ۾ بگ پيدا ڪري سگهي ٿو پر غير ارادي طور تي ڪنهن ٻئي جي ڪوڊ ۾ ڪجهه وقت اڳ لکيل ڪجهه رويي کي ٽوڙي سگھي ٿو.

جيڪڏهن اسان ان کي هڪ قدم اڳتي وڌايو، اهو خودڪار ڪرڻ ممڪن آهي ڪيترائي شيون. مختلف CI/CD اوزارن سان، توھان ھلائڻ لاءِ ٽيسٽ بيان ڪري سگھو ٿا جڏھن ڪو ماڻھو ڪنھن مخصوص Git برانچ ۾ تبديلين کي دٻائي يا ڪوڊ کي پروڊڪشن برانچ ۾ ضم ڪرڻ کان اڳ. سڀ کان آسان ڪم فلو هوندو استعمال ڪرڻ Github Actions، مون وٽ آهي هڪ الڳ وڊيو جيڪو ثابت ڪري ٿو.

توهان کي ڇا جانچڻ گهرجي؟

ان بابت مختلف رايا آهن ته ”ٽيسٽ ڪوريج“ جي نالي سان ڪيتري وڏي هجڻ گهرجي: هر ممڪن آپريشن ۽ ڪيس هر صفحي تي آزمايو، يا ڪم کي اهم حصن تائين محدود ڪريو.

حقيقت ۾، هي آهي جتي آئون انهن ماڻهن سان متفق آهيان جيڪي خودڪار ٽيسٽ کي حقيقي فائدو ڏيڻ کان وڌيڪ وقت وٺڻ جو الزام ڏين ٿا. اهو ٿي سگهي ٿو جيڪڏهن توهان هر هڪ تفصيل لاء ٽيسٽ لکندا آهيو. اهو چيو ته، اهو شايد توهان جي منصوبي جي ضرورت هجي: بنيادي سوال اهو آهي ته "ممڪن غلطي جي قيمت ڇا آهي".

ٻين لفظن ۾، توهان کي سوال پڇڻ سان توهان جي جاچ جي ڪوششن کي ترجيح ڏيڻ جي ضرورت آهي "ڇا ٿيندو جيڪڏهن هي ڪوڊ ناڪام ٿئي؟" جيڪڏهن توهان جي ادائگي جي سسٽم ۾ ڪيڙا آهن، اهو سڌو سنئون ڪاروبار تي اثر انداز ڪندو. تنهن ڪري جيڪڏهن توهان جي ڪردار / اجازتن جي ڪارڪردگي ڀڄي وئي آهي، اهو هڪ وڏو سيڪيورٽي مسئلو آهي.

مون کي پسند آهي ته Matt Stauffer ان کي هڪ ڪانفرنس ۾ ڪيئن رکيو: "توهان کي پهريان انهن شين کي جانچڻو پوندو، جيڪڏهن اهي ناڪام ٿي وڃن، توهان کي توهان جي نوڪري مان برطرف ڪيو ويندو." يقينن اهو هڪ مبالغ آهي، پر توهان اهو خيال حاصل ڪيو: پهرين اهم شيون ڪوشش ڪريو. ۽ پوء ٻيون خاصيتون، جيڪڏهن توهان وٽ وقت آهي.

PEST: PHPUnit لاء نئون متبادل

مٿين سڀني مثالن تي ٻڌل آهن Laravel پري ٽيسٽنگ ٽولdefiرات: پي ايڇ يوٽيوٽ . پر ڪيترن سالن کان ٻيا اوزار ماحولياتي نظام ۾ ظاهر ٿيا آهن ۽ هڪ جديد ترين مشهور آهي PEST . سرڪاري Laravel ملازم پاران ٺهيل نونو مدورو ، نحو کي آسان ڪرڻ جو مقصد، ٽيسٽ لاءِ لکڻ جو ڪوڊ به تيز ڪرڻ.

هود جي هيٺان، اهو هلندو آهي su PHPUnit، هڪ اضافي پرت جي طور تي، صرف ڪوشش ڪري رهيو آهي ڪجهه اڳئين ورهاڱي حصن کي گھٽائڻ جيdefiPHPUnit ڪوڊ جي نائيٽ.

اچو ته هڪ مثال ڏسو. پري فيچر ٽيسٽ ڪلاس ياد رکوdefiLaravel ۾ نائيٽ؟ مان توهان کي ياد ڏياريندس:

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);
    }
}

ڇا توهان کي خبر آهي ته ساڳيو امتحان PEST سان ڪهڙو نظر ايندو؟

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

ها، ڪوڊ جي هڪ لائن ۽ اهو ئي آهي. تنهن ڪري، PEST جو مقصد مٿي کي هٽائڻ آهي:

  • هر شي لاء ڪلاس ۽ طريقا ٺاهڻ؛
  • ٽيسٽ ڪيس جي واڌ؛
  • عملن کي الڳ الڳ لائينن تي رکڻ سان: PEST ۾ توھان انھن کي گڏ ڪري سگھو ٿا.

Laravel ۾ PEST ٽيسٽ ٺاهڻ لاءِ، توھان کي ھڪ اضافي جھنڊو بيان ڪرڻو پوندو:

php artisan make:test HomepageTest --pest

هن لکڻ جي مطابق، PEST Laravel ڊولپرز ۾ ڪافي مشهور آهي، پر اها توهان جي ذاتي ترجيح آهي ته ڇا هي اضافي اوزار استعمال ڪجي ۽ ان جي نحو کي سکڻ، انهي سان گڏ هڪ PHPUnit نوٽ.

BlogInnovazione.it

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

تازيون مضمونون

ٻارن لاءِ رنگين صفحن جا فائدا - سڀني عمرن لاءِ جادوءَ جي دنيا

رنگ سازي ذريعي سٺي موٽر صلاحيتن کي ترقي ڪرڻ ٻارن کي وڌيڪ پيچيده صلاحيتن لاء تيار ڪري ٿو جهڙوڪ لکڻ. رنگ ڏيڻ…

2 2024

مستقبل هتي آهي: ڪيئن شپنگ انڊسٽري عالمي معيشت ۾ انقلاب آڻيندي آهي

بحري شعبي هڪ حقيقي عالمي معاشي طاقت آهي، جيڪا 150 بلين مارڪيٽ جي طرف نيويگيٽ ڪئي آهي ...

1 2024

پبلشرز ۽ OpenAI مصنوعي ذهانت پاران پروسيس ڪيل معلومات جي وهڪري کي منظم ڪرڻ لاءِ معاهدن تي دستخط ڪن ٿا

گذريل سومر، فنانشل ٽائمز OpenAI سان هڪ ڊيل جو اعلان ڪيو. ايف ٽي پنهنجي عالمي سطح جي صحافت کي لائسنس ڏئي ٿو ...

30 اپريل 2024

آن لائين ادائگيون: ھتي آھي ڪيئن اسٽريمنگ سروسز توھان کي ھميشه لاءِ ادا ڪنديون آھن

لکين ماڻهو ادا ڪن ٿا اسٽريمنگ سروسز لاءِ، ادا ڪندا مھينا سبسڪرپشن فيس. اها عام راءِ آهي ته توهان…

29 اپريل 2024

پنھنجي ٻوليءَ ۾ جدت پڙھو

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

اسان جي تابعداري ڪريو