2015-11-09 17 views
25

Buduję polecenie rzemieślnicze, aby otrzymywać dane z gniazda, i chcę napisać test jednostkowy dla tego polecenia, ale nie jestem pewien, jak napisać taki test.Jak przetestować polecenia rzemieślnika w Laravel 5

Każdy ma pomysł, jak to napisać?

+1

http://laravel.com/docs/master/artisan#calling-commands-via-code? – andrewtweber

+0

http://stackoverflow.com/questions/34814954/laravel-5-console-artisan-command-unit-tests – bernie

+0

To było dla mnie lepsze podejście: https://stackoverflow.com/a/41122816/470749 – Ryan

Odpowiedz

28

Przykład testu

<?php 

use Illuminate\Foundation\Testing\WithoutMiddleware; 
use Illuminate\Foundation\Testing\DatabaseMigrations; 
use Illuminate\Foundation\Testing\DatabaseTransactions; 

class YourCommandTest extends TestCase 
{ 
    use DatabaseTransactions; 

    public function testExample() 
    { 
     Artisan::call('your_command', [ 
      'command_parameter_1' => 'value1', 
      'command_parameter_2' => 'value2', 
     ]); 

     // If you need result of console output 
     $resultAsText = Artisan::output(); 

     $this->assertTrue(true); 
    } 

} 
+1

Znaleziono to podejście jest proste i użyteczne w testach akceptacyjnych. Jednak nie będzie rejestrować zasięgu kodu dla samego polecenia. – alariva

+1

Uruchomiłem testy z opcją '--coverage-html', aby wygenerować raport zasięgu:' phpunit --coverage-html coverage_path'. I widzę zasięg metod, które nazwano wewnątrz polecenia. – mnv

+0

To ciekawe, naprawdę nie rozumiem, dlaczego nie rozumiem ich. Tutaj [moje pytanie, jeśli znajdziesz to w tym samym przypadku] (http://stackoverflow.com/questions/38032285/which-is-an-acceptable-approach-for-testing-commands-in-laravel-5-2- with-phpunit). – alariva

10

Dużo łatwiej jest teraz:

<?php 

class YourCommandTest extends TestCase 
{ 

    public function testExample() 
    { 
     $this->artisan('command', ['param' => 'value']); 
    } 

} 
+0

Gdzie jest twoje stwierdzenie? Na co się powołujesz? – Mkey