Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Добрый день. Суть проблемы, не мокается класс с использованием construct.
Собственно тестируемый метод:
private function getOrdersAndStatusesAllOrders($site)
{
$kaspiClient = app()->make(\App\Http\Kaspi\Client::class, ['site' => $site]);
$ordersIdsAndStatuses = [];
foreach($this->states() as $state){
$orders = $kaspiClient->getNewOrders(['state' => $state]);
$data = $this->getOrdersIdsAndStatuses($orders);
$ordersIdsAndStatuses = array_merge($ordersIdsAndStatuses, $data);
}
return $ordersIdsAndStatuses;
}
Необходимо замокать этот класс, как уже поняли необходимо в contruct передать ['state' => $state]:
$kaspiClient = app()->make(\App\Http\Kaspi\Client::class, ['site' => $site]);
Я пытаюсь замокать:
$codeCorrect = $this->faker->numberBetween(10000, 100000);
$statusCorrect = $this->faker->word;
$statusWrong = $this->faker->word;
$mockdata = (object)[
0 => (object)[
'attributes' => (object)[
'code' => $codeCorrect,
'status' => $statusCorrect
]
]
];
Mockery::mock(Client::class, function($mock) use ($mockdata) {
$mock->shouldReceive('getNewOrders')->andReturn($mockdata);
});
$class = new \ReflectionClass(TaskForManagersService::class);
$method = $class->getMethod('getOrdersAndStatusesAllOrders');
$method->setAccessible(true);
$result = $method->invokeArgs(new TaskForManagersService(), ['site']);
dd($result);
Но dd мне показывает реальный результат клиента, а не ожидаемый mockData...
В случае использования класса без construct, класс с указанным методом мокается без проблем. Прошу подсказать, в чем дело? Либо не так использую Mockery?