Как макетировать классы внутри командных классов в 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
Нужен ли специальный метод для насмешки над классом внутри командного класса?
Большое спасибо в продвинутом!