我有一个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注入MyService (我使用symfony)。
发布于 2019-12-12 09:28:05
您的处理程序运行良好,您只是模拟了错误的响应数据。您应该将响应作为原始的json。
试一试
$token = 'stringtoken12345stringtoken12345stringtoken12345';
$mockHandler = new MockHandler(
[
new Response(200, ['X-Foo' => 'Bar'], \json_encode([ 'token' => $token ]))
]
);现在应该是works了
https://stackoverflow.com/questions/59264210
复制相似问题