2015-09-10 2 views
1

Я построил свою собственную простую команду, которую хочу протестировать.Тестирование/Смещение пользовательских команд консоли

, который в основном выглядит следующим образом:

<?php 

namespace App\Console\Commands; 

use Illuminate\Console\Command; 
use Symfony\Component\Console\Input\InputArgument; 
use Symfony\Component\Console\Input\InputOption; 

class NeatCommand extends Command 
{ 


    protected $signature = 'my:neat:command {input_file : path for a json-formatted file to analyze}'; 

    protected $description = 'analyze an array of values'; 

    public function __construct() 
    { 
     parent::__construct(); 

    } 


    public function handle() 
    { 

     $inputFile=$this->argument('input_file'); 
     echo $inputFile; 
    } 



} 

Так что я написал этот простой тест:

/** 
* @test 
* @group neat 
*/ 
public function commandShowsHelloWorld() 
{ 

    $defaultCommand=Artisan::call('my:neat:command'); 

} 

Я просто хочу, чтобы проверить на данном этапе: есть аргументы отсутствуют. Но когда я запускаю его прямо сейчас, phpunit приносит его как ошибку:

There was 1 error: 

1) App\Console\Commands\NeatCommandTest::commandShowsHelloWorld 
RuntimeException: Not enough arguments. 

Так что мой вопрос. Как я могу издеваться над всем ... или сказать что-то вроде $this->shouldReturn('RuntimeException: Not enough arguments.');?

+1

Я задаюсь вопросом, почему ваш тест функция не начинается с «тест», а также, почему бы не использовать @expectedException аннотацию из PHPUnit https://phpunit.de/manual/current/en/appendixes.annotations.html# appendixes.annotations.expectedException – Armin

+0

да, я получил работу с ожидаемым результатом. Благодарю. а также @test был там, забыл написать его здесь. – Confidence

+0

Что вы пытаетесь проверить? Если вы пытаетесь протестировать свой код, который выполняет анализ, я бы переместил его в отдельную библиотеку и протестировал его, используя стандартные методы тестирования модулей. Что касается тестирования 'Artisan :: call (...)' - я бы не стал беспокоиться. Рамки (как вызвать команду и т. Д.) Уже были протестированы; то, что не было протестировано, это настраиваемый код, который вы пишете. – Kryten

ответ

0

Получил его работу, но добавил @annotation ожидаемых исключений.

/** 
* @test 
* @group neat 
* @expectedException RuntimeException 
* @expectedExceptionMessage Not enough arguments. 
*/ 
public function commandWithoutArgumentsCausesError() 
{ 

    $defaultCommand=Artisan::call('my:neat:command'); 

} 
Смежные вопросы