首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Guzzle模拟处理程序传递给PHP类以测试具有json响应的API调用

如何将Guzzle模拟处理程序传递给PHP类以测试具有json响应的API调用
EN

Stack Overflow用户
提问于 2019-12-10 17:39:47
回答 1查看 410关注 0票数 3

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

代码语言:javascript
复制
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测试这个方法,这是我到目前为止所做的,但没有起作用:

代码语言:javascript
复制
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)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-12 09:28:05

您的处理程序运行良好,您只是模拟了错误的响应数据。您应该将响应作为原始的json。

试一试

代码语言:javascript
复制
$token = 'stringtoken12345stringtoken12345stringtoken12345';
    $mockHandler = new MockHandler(
    [
    new Response(200, ['X-Foo' => 'Bar'], \json_encode([ 'token' => $token ]))
    ]
);

现在应该是works了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59264210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档