我应该如何正确地模仿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客户端。然后使用第二个函数,可以通过测试调用,以使用具有模拟适配器的新客户端替换客户端。我不确定这是否是最好的做事方式。
答案 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