0

我在 PHP 中有以下代码:

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

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

似乎我成功地为请求创建了一个模拟:

$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
4

1 回答 1

1

它不是 a $request,它是 a $response,你最好这样命名。$request 变量包含响应对象非常令人困惑。

反正,

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

更深入地观察它,您可能不必在意,该响应被模拟并且无法测试,如果您正确设置模拟,您将进行测试,而不是测试您的代码。

于 2020-06-16T05:38:53.583 回答