监视构造函数中的类无法记录接收到的方法调用



我想做的是断言在请求期间调用了类的方法。代码可能会更好地解释我正在尝试做什么:

测试:

public function use_default_provider_when_getting_addresses()
{
$spy = $this->spy(CraftyClicksService::class);
$this->app->bind(CraftyClicksService::class, function () use ($spy) {
return $spy;
});
$addresses = $this->get('/api/v1/address?postcode=POSTCODE')->decodeResponseJson();
$this->assertTrue(in_array([
'line_1' => 'Line 1',
'line_2' => 'Line 2',
'postcode' => 'POSTCODE',
], $addresses));
$spy->shouldHaveReceived('getAddresses')->once();
}

请求命中一个简单的控制器:

public function show(Request $request, AddressService $addressService)
{
return $addressService->findAddress($request->input('postcode'));
}

然后,地址服务类(目前(调用另一个类的函数来检索地址。

class AddressService
{
protected CraftyClicksService $craftyClicksService;
/**
* AddressService constructor.
*/
public function __construct()
{
$this->craftyClicksService = new CraftyClicksService();
}
/**
* @param string $postcode
* @return array
*/
public function findAddress(string $postcode)
{
return $this->craftyClicksService->getAddresses($postcode);
}

我可以"监视"AddressService类并断言它收到了findAddress方法,但是似乎我无法断言CraftyClicksService类的getAddresses函数。

我总是收到一个Method getAddresses(<Any Arguments>) from Mockery_3_App_Services_CraftyClicksService should be called at least 1 times but called 0 times.错误,即使响应测试通过并且可以确认该方法确实是调用的方法。

已尝试使用$this->app->bind$this->spy(),但测试仍然失败。

您需要使用依赖关系注入,并让服务容器从容器解析依赖关系,以便 AddressService 类应更改为

class AddressService
{
protected CraftyClicksService $craftyClicksService;
/**
* AddressService constructor.
*/
public function __construct(CraftyClicksService $CraftyClicksService)
{
$this->craftyClicksService = $CraftyClicksService;
}
/**
* @param string $postcode
* @return array
*/
public function findAddress(string $postcode)
{
return $this->craftyClicksService->getAddresses($postcode);
}

这样,将使用已将其绑定到容器的间谍对象。

最新更新