Как макетировать классы внутри командных классов в Laravel

Я использую Laravel 5.3. Для процедуры я использую команду. Командный класс вызывает метод другого класса. Я хотел протестировать его с phpunit. Поэтому я смоделировал класс внутри командного класса. Когда я запускаю тест, тогда выполняется сам метод класса, а не проверенный метод. Bevor Я реализовал функцию команды в работе. Там я могу вызвать смоделированный метод без каких-либо проблем.

Тестовый класс выглядит так:

class CommandTest extends TestCase
{
    public function setUp()
    {
         parent::setUp();
         $this->api = $this->getMockBuilder('App\Services\APIRepository')
         ->setMethods(['getStatus'])
         ->getMock();
    }

    /** @test */
    public function test_api()
    {
         ...
         $this->api->expects($this->any())
             ->method('getStatus')
             ->will($this->returnValue($api_response));
         \Artisan::call('myapp:tracker',[]);
         ...
    }
}

class Command extends Command
{
    protected $signature = 'myapp:tracker';
    private $api;

    public function __construct(APIRepository $api)
    {
         $this->api = $api;
    }

    public function handle()
    {
         ...
         $status = $this->api->getStatus(...);
         var_dump($status);
         ...
    }
}

Вывод var_dump($status): NULL

Нужен ли специальный метод для насмешки над классом внутри командного класса?

Большое спасибо в продвинутом!

0 ответов

Другие вопросы по тегам