gpt4 book ai didi

php - 如何将 Guzzle Mock Handler 传递给 PHP 类以测试具有 json 响应的 API 调用

转载 作者:行者123 更新时间:2023-12-01 14:40:29 26 4
gpt4 key购买 nike

我有一个 php 类,它使用 guzzle 调用 API 并获得响应:

public function getResponseToken()
{
$response = $this->myGUzzleClient->request(
'POST',
'/token.php,
[
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded'
],
'form_params' => [
'username' => $this->params['username'],
'password' => $this->params['password'],
]
]
);

return json_decode($response->getBody()->getContents())->token;
}

我正在尝试使用 guzzle mock handler 测试此方法,这是我到目前为止所做的但没有工作:

public function testGetResponseToken()
{

$token = 'stringtoken12345stringtoken12345stringtoken12345';
$mockHandler = new MockHandler([
new Response(200, ['X-Foo' => 'Bar'], $token)
]
);

$handlerStack = HandlerStack::create($mockHandler);
$client = new Client(['handler' => $handlerStack]);


$myService = new MyService(
new Logger('testLogger'),
$client,
$this->config
);

$this->assertEquals($token, $myService->getResponseToken());
}

我得到的错误是“试图获取非对象的属性”,所以在我看来 MyService 没有使用处理程序来进行调用。我究竟做错了什么?

该类在测试上下文之外按预期工作。还要注意客户端通常从 service.yml 注入(inject)到 MyService 中(我使用的是 symfony)。

最佳答案

您的处理程序工作正常,您只是模拟了错误的响应数据。您应该将响应作为原始 json。

尝试

$token = 'stringtoken12345stringtoken12345stringtoken12345';
$mockHandler = new MockHandler(
[
new Response(200, ['X-Foo' => 'Bar'], \json_encode([ 'token' => $token ]))
]
);

现在应该可以了

关于php - 如何将 Guzzle Mock Handler 传递给 PHP 类以测试具有 json 响应的 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59264210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com