ፅሁፎች

PHPUnit እና PESTን በመጠቀም በቀላል ምሳሌዎች በላራቬል ውስጥ እንዴት ሙከራዎችን እንደሚያደርጉ ይወቁ

ወደ አውቶሜትድ ሙከራዎች ወይም የክፍል ሙከራዎች ስንመጣ፣ በማንኛውም የፕሮግራም አወጣጥ ቋንቋ፣ ሁለት ተቃራኒ አስተያየቶች አሉ፡

  • ጊዜ ማባከን
  • ያለሱ ማድረግ አይችሉም

ስለዚህ, በዚህ ጽሑፍ የቀድሞውን ለማሳመን እንሞክራለን, በተለይም በላራቬል ውስጥ አውቶማቲክ ሙከራን ለመጀመር ምን ያህል ቀላል እንደሆነ በማሳየት.

በመጀመሪያ ስለ "ለምን" እንነጋገር, እና ከዚያ እንዴት አንዳንድ ምሳሌዎችን እንመልከት.

ለምንድነው አውቶማቲክ ምርመራ ያስፈልገናል

አውቶማቲክ ሙከራዎች የኮዱ ክፍሎችን ያካሂዳሉ እና ማንኛውንም ስህተቶች ሪፖርት ያደርጋሉ። እነሱን ለመግለፅ ቀላሉ መንገድ ይህ ነው። እስቲ አስቡት በመተግበሪያ ውስጥ አዲስ ባህሪን መልቀቅ፣ እና ከዚያ የግል ሮቦት ረዳት ሄዶ አዲሱን ባህሪ በእራሱ ይፈትሻል፣ እንዲሁም አዲሱ ኮድ የትኛውንም የድሮ ባህሪያትን እንዳልጣሰ እየፈተሸ ነው።

ይህ ዋናው ጥቅም ነው: ሁሉንም ባህሪያት በራስ-ሰር እንደገና መሞከር. ይህ እንደ ተጨማሪ ስራ ሊመስል ይችላል፣ ነገር ግን “ሮቦት” እንዲሰራ ካልነገርከው፣ እንደ አማራጭ በእጅ ልንሰራው ይገባል፣ አይደል? 

ወይም ተጠቃሚዎች ሳንካዎችን እንደሚዘግቡ ተስፋ በማድረግ አዳዲስ ባህሪያት መስራታቸውን አለመፈተሽ ሊለቀቁ ይችላሉ።

አውቶማቲክ ሙከራዎች ብዙ ጥቅሞችን ሊሰጡን ይችላሉ-

  • በእጅ የሙከራ ጊዜ ይቆጥቡ;
  • የተተገበረውን አዲሱን ተግባር እና የተጠናከረ ተግባራትን እንደገና መመለስን በማስወገድ ጊዜ እንዲቆጥቡ ያስችሉዎታል;
  • ይህንን ጥቅማጥቅሞች በሁሉም አዳዲስ ባህሪያት እና ቀደም ሲል በተተገበሩ ሁሉም ባህሪያት ማባዛት;
  • የቀደሙት ሶስት ነጥቦች በእያንዳንዱ አዲስ ስሪት ላይ ተፈጻሚ ይሆናሉ;
  • ...

ማመልከቻህን በአንድ ወይም ሁለት አመት ውስጥ በዓይነ ሕሊናህ ለመሳል ሞክር፣ በቡድኑ ውስጥ ካሉ አዳዲስ ገንቢዎች ጋር ባለፉት ዓመታት የተፃፈውን ኮድ የማያውቁ፣ ወይም እንዴት እንደሚሞክሩት። 

የእኛ የመጀመሪያ አውቶማቲክ ሙከራዎች

የመጀመሪያውን ለማከናወን በላራቬል ውስጥ አውቶማቲክ ሙከራ፣ ምንም ኮድ መጻፍ አያስፈልግዎትም። አዎ፣ በትክክል አንብበሃል። ሁሉም ነገር አስቀድሞ የተዋቀረ እና በቅድመ-መጫኛ ውስጥ ተዘጋጅቷልdefiየላራቬል ኒት፣ የመጀመሪያውን መሰረታዊ ምሳሌን ጨምሮ።

የላራቬል ፕሮጀክትን ለመጫን መሞከር እና የመጀመሪያዎቹን ሙከራዎች ወዲያውኑ ማካሄድ ይችላሉ፡

laravel new project
cd project
php artisan test

ይህ በእርስዎ ኮንሶል ውስጥ ያለው ውጤት መሆን አለበት፡-

ቅድመ ሁኔታን ከተመለከትንdefiየ Laravel nite /tests, ሁለት ፋይሎች አሉን:

tests/ባህሪ/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/ዩኒት/ExampleTest.php

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

ይህ እውነት መሆኑን ለማረጋገጥ ትንሽ ትርጉም የለሽ ይመስላል? 

በተለይ ስለ ክፍል ሙከራዎች ትንሽ ቆይተን እንነጋገራለን። ለአሁን በእያንዳንዱ ፈተና ውስጥ በአጠቃላይ ምን እንደሚከሰት መረዳት አለብዎት.

  • በአቃፊው ውስጥ እያንዳንዱ የሙከራ ፋይል /tests የ TestCase ን የሚያራዝም ፒኤችፒ ክፍል ነው። PHPUnit
  • በእያንዳንዱ ክፍል ውስጥ, ብዙ ዘዴዎችን መፍጠር ይችላሉ, ብዙውን ጊዜ አንድ ሁኔታን ለመፈተሽ አንድ ዘዴ
  • በእያንዳንዱ ዘዴ ውስጥ ሶስት እርምጃዎች አሉ-ሁኔታውን ማዘጋጀት, ከዚያም እርምጃ መውሰድ እና ውጤቱ እንደተጠበቀው መሆኑን ማረጋገጥ (ማረጋገጥ)

በመዋቅር፣ ማወቅ ያለብዎት ያ ብቻ ነው፣ የተቀረው ነገር ሁሉ በትክክል መሞከር በሚፈልጉት ነገሮች ላይ የተመሰረተ ነው።

ባዶ የሙከራ ክፍል ለመፍጠር በቀላሉ ይህንን ትዕዛዝ ያሂዱ፡-

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

አሁን የሙከራ ኮድ በላራቬል ውስጥ ካልተሳካ ምን እንደሚሆን እንይ

የፈተና ማረጋገጫዎች የሚጠበቀውን ውጤት ካልመለሱ ምን እንደሚፈጠር አሁን እንይ.

የምሳሌ ፈተናዎችን ወደዚህ እንለውጣ፡-

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 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(). በይፋዊው ሰነድ ውስጥ ያሉትን ሁሉንም ማረጋገጫዎች ማረጋገጥ ይችላሉ PHPUnit e የላራቬል ምላሽ . በዚህ ጉዳይ ላይ አንዳንድ አጠቃላይ መግለጫዎች እንደሚከሰቱ ልብ ይበሉ $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',
]);

የመግቢያ ገጽ ምሳሌ

አሁን ሌላ የመግቢያ ገጽ ከላራቬል ብሬዝ ጋር እንይ

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

ስለ መግቢያ ቅጹ ነው። አመክንዮው ከመመዝገቢያ ጋር ተመሳሳይ ነው, አይደል? ግን ከሁለት ይልቅ ሶስት ዘዴዎች, ስለዚህ ይህ ሁለቱንም ጥሩ እና መጥፎ ሁኔታዎችን የመሞከር ምሳሌ ነው. ስለዚህ, የተለመደው አመክንዮ ሁለቱንም ጉዳዮች መሞከር አለብዎት: ነገሮች ጥሩ ሲሆኑ እና ሲሳኩ.

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

እንዲሁም፣ በዚህ ሙከራ ውስጥ የሚያዩት አጠቃቀሙን ነው። የውሂብ ጎታ ፋብሪካዎች ላራቬል የውሸት ተጠቃሚ ይፈጥራል እንደገና፣ በተዘመነው የሙከራ ዳታቤዝዎ ላይ ) እና ከዚያ ትክክለኛ ወይም የተሳሳቱ ምስክርነቶችን ይዞ ለመግባት ይሞክራል።

በድጋሚ, ላራቬል የፋብሪካውን ቅድመ ሁኔታ ያመነጫልdefiኒታ ከሐሰት ውሂብ ጋር 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),
        ];
    }
}

አየህ፣ በራሱ በላራቬል ምን ያህል ነገሮች ተዘጋጅተዋል፣ ስለዚህ መፈተሽ ለመጀመር ቀላል ይሆንልናል?

ስለዚህ እኛ ብንፈጽም 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 ስነ-ምህዳር ውጭ፣ በርካታ አይነት አውቶሜትድ ሙከራዎች አሉ። እንደዚህ ያሉ ውሎችን ማግኘት ይችላሉ-

  • የክፍል ሙከራዎች
  • የባህሪ ሙከራ
  • የውህደት ሙከራዎች
  • ተግባራዊ ሙከራዎች
  • ከጫፍ እስከ ጫፍ ሙከራ
  • ተቀባይነት ፈተናዎች
  • የጭስ ሙከራዎች
  • ወዘተ.

ውስብስብ ይመስላል, እና በእነዚህ አይነት ሙከራዎች መካከል ያለው ትክክለኛ ልዩነት አንዳንድ ጊዜ ይደበዝዛል. ለዛም ነው ላራቬል እነዚህን ሁሉ ግራ የሚያጋቡ ቃላትን ቀለል አድርጎ በሁለት ከፋፍሏቸዋል፡ አሃድ/ባህሪ።

በቀላል አነጋገር የባህሪ ሙከራዎች የመተግበሪያዎችዎን ትክክለኛ ተግባር ለማስፈጸም ይሞክራሉ፡ URL ያግኙ፣ ኤፒአይ ይደውሉ፣ ቅጹን እንደ መሙላት ትክክለኛውን ባህሪ ያስመስሉ። የባህሪ ሙከራዎች ብዙውን ጊዜ ማንኛውም የፕሮጀክት ተጠቃሚ በእጅ፣ በእውነተኛ ህይወት እንደሚያደርጋቸው ተመሳሳይ ወይም ተመሳሳይ ስራዎችን ያከናውናሉ።

የክፍል ፈተናዎች ሁለት ትርጉም አላቸው። በአጠቃላይ፣ ማንኛውም አውቶሜትድ ሙከራ “የዩኒት ሙከራ” ተብሎ የሚጠራ ሲሆን አጠቃላይ ሂደቱም “ዩኒት ሙከራ” ተብሎ ሊጠራ ይችላል። ነገር ግን በተግባራዊነት እና በዩኒት አውድ ውስጥ፣ ይህ ሂደት የተወሰነ የህዝብ ያልሆነ የኮድ ክፍልን በተናጥል ስለመሞከር ነው። ለምሳሌ ፣ ልክ እንደ አጠቃላይ የትዕዛዝ ዋጋ ከግቤቶች ጋር አንድን ነገር የሚያሰላ ዘዴ ያለው የላራቭል ክፍል አለዎት። ስለዚህ፣ የክፍል ፈተናው ትክክለኛ ውጤቶች ከዚያ ዘዴ (የኮድ አሃድ) መመለሳቸውን እና ከተለያዩ መለኪያዎች ጋር ይገልፃል።

የክፍል ሙከራ ለማመንጨት ባንዲራ ማከል አለብህ፡-

php artisan make:test OrderPriceTest --unit

የመነጨው ኮድ ከቅድመ አሃድ ሙከራ ጋር ተመሳሳይ ነው።defiላራቭል ሲስተም;

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
}

ከላራቬል ፕሮጀክቶች ጋር ባለኝ የግል ተሞክሮ፣ አብዛኛዎቹ ፈተናዎች የባህሪ ፈተናዎች እንጂ የዩኒት ሙከራዎች አይደሉም። በመጀመሪያ፣ ማመልከቻዎ የሚሰራ መሆኑን፣ እውነተኛ ሰዎች በሚጠቀሙበት መንገድ መሞከር ያስፈልግዎታል።

በመቀጠል, ልዩ ስሌት ወይም ሎጂክ ካለዎት ይችላሉ definire እንደ አሃድ፣ ከመለኪያዎች ጋር፣ በተለይ ለዚያ የክፍል ሙከራዎችን መፍጠር ይችላሉ።

አንዳንድ ጊዜ ፈተናዎችን መፃፍ ኮዱን እራሱን ማሻሻል እና የበለጠ “ተሞካሪ” እንዲሆን ማደስን ይጠይቃል፡ ክፍሎቹን ወደ ልዩ ክፍሎች ወይም ዘዴዎች መለየት።

ፈተናዎችን መቼ/እንዴት ማድረግ ይቻላል?

የዚህ ትክክለኛ አጠቃቀም ምንድነው? php artisan test፣ መቼ ነው ማስኬድ ያለብዎት?

እንደ ንግድዎ የስራ ሂደት ላይ በመመስረት የተለያዩ አቀራረቦች አሉ ነገርግን በአጠቃላይ ሁሉም ፈተናዎች "አረንጓዴ" (ማለትም ከስህተት የፀዱ) መሆናቸውን ማረጋገጥ አለብዎት የመጨረሻውን የኮድ ለውጦች ወደ ማጠራቀሚያው ከመግፋትዎ በፊት.

ከዚያ፣ በተግባራችሁ ላይ በአገር ውስጥ ትሰራላችሁ፣ እና እንደጨረስክ ስታስብ ምንም ነገር እንዳልሰበርክ ለማረጋገጥ አንዳንድ ሙከራዎችን አሂድ። ያስታውሱ፣ ኮድዎ በእርስዎ ሎጂክ ላይ ብቻ ሳይሆን ሳታስበው ከረጅም ጊዜ በፊት በተጻፈው የሌላ ሰው ኮድ ውስጥ ያሉ አንዳንድ ባህሪያትን ሊሰብር ይችላል።

አንድ እርምጃ ከወሰድን, አውቶማቲክ ማድረግ ይቻላል ቀልጦ ነገሮች. በተለያዩ የሲአይ/ሲዲ መሳሪያዎች፣ አንድ ሰው ወደ አንድ የተወሰነ የጂት ቅርንጫፍ ለውጥ በሚገፋበት ጊዜ ወይም ኮድን ወደ ምርት ቅርንጫፍ ከማዋሃድ በፊት የሚሄዱ ሙከራዎችን መግለጽ ይችላሉ። በጣም ቀላሉ የስራ ሂደት Github Actions መጠቀም ነው፣ አለኝ የተለየ ቪዲዮ ይህም ያረጋግጣል.

ምን መሞከር አለቦት?

"የሙከራ ሽፋን" ተብሎ የሚጠራው ምን ያህል ትልቅ መሆን እንዳለበት የተለያዩ አስተያየቶች አሉ-በእያንዳንዱ ገጽ ላይ ያለውን እያንዳንዱን ቀዶ ጥገና እና መያዣ ይሞክሩ ወይም ስራውን በጣም አስፈላጊ በሆኑ ክፍሎች ይገድቡ.

በእውነቱ፣ ትክክለኛ ጥቅማጥቅሞችን ከመስጠት የበለጠ ጊዜ ወስደዋል ብለው ከሚከሱ ሰዎች ጋር የምስማማበት እዚህ ላይ ነው። ለእያንዳንዱ ዝርዝር ፈተናዎችን ከጻፉ ይህ ሊከሰት ይችላል. ያ ማለት ፣ በፕሮጀክትዎ ሊፈለግ ይችላል-ዋናው ጥያቄ "የስህተት ዋጋ ምን ያህል ነው" ነው።

በሌላ አነጋገር፣ “ይህ ኮድ ካልተሳካ ምን ይሆናል?” የሚለውን ጥያቄ በመጠየቅ ለሙከራ ጥረቶችዎ ቅድሚያ መስጠት አለብዎት። የክፍያ ስርዓትዎ ስህተቶች ካሉት በቀጥታ ንግዱን ይነካል። ስለዚህ የእርስዎ ሚናዎች/ፍቃዶች ተግባራዊነት ከተሰበረ ይህ ትልቅ የደህንነት ጉዳይ ነው።

ማት ስታውፈር በአንድ ኮንፈረንስ ላይ እንዴት እንዳስቀመጠው ወድጄዋለሁ፡- “መጀመሪያ እነዚያን ነገሮች፣ ካልተሳኩ፣ ከስራህ የሚያባርሩህን መሞከር አለብህ። በእርግጥ ይህ የተጋነነ ነገር ነው, ነገር ግን ሃሳቡን ገባህ: መጀመሪያ አስፈላጊ የሆኑትን ነገሮች ሞክር. እና ከዚያ ሌሎች ባህሪያት, ጊዜ ካለዎት.

PEST፡ ለ PHPUnit አዲስ አማራጭ

ከላይ ያሉት ሁሉም ምሳሌዎች በላራቬል ቅድመ ሙከራ መሳሪያ ላይ የተመሰረቱ ናቸውdefiናይት፡ PHPUnit . ነገር ግን ባለፉት አመታት ሌሎች መሳሪያዎች በስርዓተ-ምህዳር ውስጥ ታይተዋል እና ከቅርብ ጊዜዎቹ ታዋቂዎች አንዱ ነው ተባይ . በይፋዊ የላራቬል ሰራተኛ የተፈጠረ ኑኖ ማዱሮ , ዓላማው አገባቡን ለማቃለል ነው, ለፈተናዎች የመጻፍ ኮድን የበለጠ ፈጣን ያደርገዋል.

በመከለያው ስር, ይሮጣል su PHPUnit፣ እንደ ተጨማሪ ንብርብር፣ አንዳንድ ቀድሞ የተደጋገሙ ክፍሎችን ብቻ ለመቀነስ በመሞከር ላይdefiየ PHPUnit ኮድ።

አንድ ምሳሌ እንመልከት። የቅድመ ባህሪ ሙከራ ክፍልን አስታውስdefiበላራቬል ውስጥ ገብቷል? አስታውሳችኋለሁ፡-

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 ውስጥ አንድ ላይ ሰንሰለት ማድረግ ትችላለህ።

በላራቬል ውስጥ የ PEST ሙከራን ለመፍጠር ተጨማሪ ባንዲራ መጥቀስ ያስፈልግዎታል፡-

php artisan make:test HomepageTest --pest

እስከዚህ ጽሑፍ ድረስ፣ PEST በላራቬል ገንቢዎች ዘንድ በጣም ታዋቂ ነው፣ ነገር ግን ይህን ተጨማሪ መሣሪያ መጠቀም እና አገባቡን እንዲሁም የ PHPUnit ማስታወሻን መማር የግል ምርጫዎ ነው።

BlogInnovazione.it

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

የቅርብ ጊዜ ጽሁፎች

Veeam ከጥበቃ እስከ ምላሽ እና ማገገሚያ ድረስ ለቤዛዌር በጣም አጠቃላይ ድጋፍን ያቀርባል

Coveware by Veeam የሳይበር ዘረፋ የአደጋ ምላሽ አገልግሎቶችን መስጠቱን ይቀጥላል። Coveware የፎረንሲክስ እና የማገገሚያ ችሎታዎችን ያቀርባል…

23 April 2024

አረንጓዴ እና ዲጂታል አብዮት፡- የመተንበይ ጥገና የነዳጅ እና ጋዝ ኢንዱስትሪን እንዴት እየለወጠ ነው።

የመተንበይ ጥገና የዘይት እና ጋዝ ዘርፉን አብዮት እያደረገ ነው፣ ለዕፅዋት አስተዳደር ፈጠራ እና ንቁ አቀራረብ።…

22 April 2024

የዩኬ ፀረ እምነት ተቆጣጣሪ የBigTech ማንቂያ በጄኔአይ ላይ ያስነሳል።

የዩኬ ሲኤምኤ ስለ ቢግ ቴክ ባህሪ በአርቴፊሻል ኢንተለጀንስ ገበያ ላይ ማስጠንቀቂያ ሰጥቷል። እዚያ…

18 April 2024

ካሳ አረንጓዴ፡ ለወደፊት ጣሊያን የኢነርጂ አብዮት

የሕንፃዎችን ኢነርጂ ውጤታማነት ለማሳደግ በአውሮፓ ህብረት የተቀረፀው የ"ኬዝ አረንጓዴ" ድንጋጌ የህግ አውጭ ሂደቱን በ…

18 April 2024

ፈጠራን በቋንቋዎ ያንብቡ

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

ይከተሉን