تست های کنسول
معرفی
لاراول علاوه بر سادهسازی تست HTTP، یک API ساده برای آزمایش دستورات کنسول سفارشی برنامه شما ارائه میکند .
موفقیت / انتظارات شکست
برای شروع، بیایید نحوه اظهار نظر در مورد کد خروج یک فرمان Artisan را
بررسی کنیم. برای انجام این کار،
artisan
از روش فراخوانی دستور Artisan از تست خود
استفاده می کنیم .
سپس، از روش استفاده خواهیم کرد
assertExitCode
تا ادعا کنیم که دستور با یک کد خروج داده شده تکمیل شده است:
/** * Test a console command. * * @return void */public function test_console_command(){ $this->artisan('inspire')->assertExitCode(0);}
میتوانید از این
assertNotExitCode
روش برای تأیید اینکه دستور با کد خروجی داده شده خارج نشده است استفاده
کنید:
$this->artisan('inspire')->assertNotExitCode(1);
البته، تمام دستورات ترمینال معمولاً با کد وضعیت
0
زمانی که موفقیت آمیز هستند و کد خروج غیر صفر زمانی که موفقیت آمیز نیستند،
خارج می شوند. بنابراین، برای راحتی، میتوانید از اعترافات
assertSuccessful
و
assertFailed
برای تأیید اینکه یک دستور داده شده با یک کد خروج موفق خارج شده است یا
خیر، استفاده کنید:
$this->artisan('inspire')->assertSuccessful(); $this->artisan('inspire')->assertFailed();
انتظارات ورودی / خروجی
لاراول به شما اجازه می دهد تا با استفاده از این روش، به راحتی ورودی کاربر
را برای دستورات کنسول خود "تقلید کنید"
expectsQuestion
. علاوه بر این، می توانید کد خروجی و متنی را که انتظار دارید توسط دستور
کنسول با استفاده از متدهای
assertExitCode
و خروجی داده شود را مشخص کنید
expectsOutput
. به عنوان مثال، دستور کنسول زیر را در نظر بگیرید:
Artisan::command('question', function () { $name = $this->ask('What is your name?'); $language = $this->choice('Which language do you prefer?', [ 'PHP', 'Ruby', 'Python', ]); $this->line('Your name is '.$name.' and you prefer '.$language.'.');});
می توانید این دستور را با تست زیر که از متدهای
expectsQuestion
,
expectsOutput
,
doesntExpectOutput
,
expectsOutputToContain
,
doesntExpectOutputToContain
, و استفاده می کند تست کنید
assertExitCode
:
/** * Test a console command. * * @return void */public function test_console_command(){ $this->artisan('question') ->expectsQuestion('What is your name?', 'Taylor Otwell') ->expectsQuestion('Which language do you prefer?', 'PHP') ->expectsOutput('Your name is Taylor Otwell and you prefer PHP.') ->doesntExpectOutput('Your name is Taylor Otwell and you prefer Ruby.') ->expectsOutputToContain('Taylor Otwell') ->doesntExpectOutputToContain('you prefer Ruby') ->assertExitCode(0);}
انتظارات تایید
هنگام نوشتن دستوری که انتظار تایید در قالب پاسخ "بله" یا "خیر" را دارد،
می توانید از
expectsConfirmation
روش زیر استفاده کنید:
$this->artisan('module:import') ->expectsConfirmation('Do you really wish to run this command?', 'no') ->assertExitCode(1);
جدول انتظارات
اگر دستور شما جدولی از اطلاعات را با استفاده از
table
روش Artisan نمایش می دهد، نوشتن انتظارات خروجی برای کل جدول می تواند
دشوار باشد. در عوض، می توانید از
expectsTable
روش استفاده کنید. این متد هدر جدول را به عنوان آرگومان اول و داده های
جدول را به عنوان آرگومان دوم می پذیرد:
$this->artisan('users:all') ->expectsTable([ 'ID', 'Email', ], [ [1, 'taylor@example.com'], [2, 'abigail@example.com'], ]);