如何使用Mockery来嘲笑像GuzzleHttp请求这样的嵌套对象?

问题描述 投票:0回答:1

我在PHP中有以下代码。

$response = $this->client->request('GET', $path, $requestBody, $headers);
$isRequestSuccess = $response->getStatusCode() === "200";

if ($isRequestSuccess) {
    return $response->getBody()->getContents();
}

似乎我成功地创建了一个请求的mock。 It seems like I was successful in creating a mock for the request. 但我应该如何使用Mockery来模拟请求呢?

$mockResponse = \Mockery::mock('GuzzleHttp\Psr7\Response');

$clientMock
    ->shouldReceive('request')
    ->once()
    ->withAnyArgs()
    ->andReturn($mockResponse);

$clientMock->shouldReceive('getStatusCode')->andReturn(200);

但是,我应该如何使用Mockery来模拟... getStatusCode?

它应该返回一个 Psr7\Response 对象 GuzzleHttp.

我知道... $clientMock 返回值应该分配给一个参数,但我应该如何模拟

$response->getStatusCode();

$response->getBody()->getContents()

如果我要嘲笑 getStatusCode 并返回200,我得到以下错误。

Method Mockery_4_GuzzleHttp_Psr7_Response::getStatusCode() does not exist on this mock object
php guzzle mockery psr-7
1个回答
1
投票

这不是一个 $request它是一个 $response,你最好给它起个名字。它是非常混乱的,$request变量包含一个响应对象。

无论如何。

Mockery::mock(ResponseInterface::class)->shouldReceive('getStatusCode')->andReturn(200);

深入来看,你可能不必在意,那个响应是被模拟的,对测试毫无用处,如果你设置的模拟正确,你就会进行测试,而不是测试你的代码。

© www.soinside.com 2019 - 2024. All rights reserved.