【发布时间】:2021-09-12 12:33:23
【问题描述】:
我有这个类,它使用Http::Pool 将数据推送到多个 url。
class Pusher()
{
public function __construct($data, $headers)
{
$this->data = $data;
$this->headers = $headers;
}
public function pushToAddresses()
{
$addresses = get_address_somewhere_here();
$responses = Http::pool(fn (Pool $pool) => $addresses->map(fn ($address) => $this->pushData($pool, $address)));
}
public function pushData(Pool $pool, $address)
{
return $pool->withHeaders($this->headers)
->withBody($this->data, 'application/json')
->post($address->url);
}
}
问题:如何模拟Pool,以便我可以测试withHeaders、withBody、post 是否使用正确的数据正确调用?
类似:
$mockPool = \Mockery::mock(Pool::class);
$mockPool->shouldReceive('withHeaders')->once()->with(['header1', 'header2']);
$mockPool->shouldReceive('withBody')->once()->with('{body here...}', 'application/json');
$mockPool->shouldReceive('post')->once()->with('address url here...');
【问题讨论】:
-
Http::Pool 来自 Laravel 基础库,无需测试。库有责任对其进行测试,您只需使用它并期望它能够工作。
标签: php laravel phpunit mockery