嘲笑GuzzleHttp响应

时间:2014-08-14 15:58:17

标签: phpunit guzzle

我应该如何正确地模仿Guzzle的反应。在测试我正在编写的解析器时,测试html包含在文件中。在我的PHPUnit测试中,我正在做file_read_contents并将结果传递给我的方法。有时HTML会链接到单独的文件。我可以像这样嘲笑这个回应:

public function testAlgo()
{
    $mock = new MockAdapter(function() {
        $mockhtml = file_get_contents($this->dir . '/HTML/authorship-test-cases/h-card_with_u-url_that_is_also_rel-me.html');
        $stream = Stream\create($mockhtml);

        return new Response(200, array(), $stream);
    });
    $html = file_get_contents($this->dir . '/HTML/authorship-test-cases/h-entry_with_rel-author_pointing_to_h-card_with_u-url_that_is_also_rel-me.html');
    $parser = new Parser();
    $parser->parse($html, $adaptor = $mock);

然后在我的实际方法中,当我发出guzzle请求时,此代码有效:

try {
    if($adapter) {
        $guzzle = new \GuzzleHttp\Client(['adapter' => $adapter]);
    } else {
        $guzzle = new \GuzzleHttp\Client();
    }
    $response = $guzzle->get($authorPage);

显然这不是理想的。有谁知道更好的方法吗?         $ html =(string)$ response-> getBody();

编辑:我现在正在使用__construct() methid来设置默认的Guzzle客户端。然后使用第二个函数,可以通过测试调用,以使用具有模拟适配器的新客户端替换客户端。我不确定这是否是最好的做事方式。

1 个答案:

答案 0 :(得分:1)

您可以使用MockPlugin API,如下所示:

$plugin = new MockPlugin();
$plugin->addResponse(__DIR__.'/twitter_200_response.txt');

然后,txt文件包含您的回复中的所有内容,包括标题。

这里也有很好的方法:http://www.sitepoint.com/unit-testing-guzzlephp/

此处还有文章:http://guzzle3.readthedocs.io/testing/unit-testing.html