首先我要说的是我刚开始编写测试,所以我可能会混淆我的工具和/或测试概念。
我使用Laravel 5.2构建了一个api。我在./tests中编写了测试,扩展了TestCase,几乎涵盖了api请求和响应的所有元素。
继续使用查询参数进行GET请求所需的api的一些功能。我发现使用Laravel的$ this-> call('GET',$ url)方法并不容易或不可能,所以我添加了Guzzle来实现这一目标。
很棒......当我一次运行一组测试时,一切都有效。
但是,当我运行api的整个测试序列时,我得到了一个TOO MANY CONNECTIONS错误,该错误源于使用Guzzle的测试触发的HTTP请求数。为解决此问题,我尝试使用Guzzle's Async Requests feature。
现在的问题是PHPUnit正在完成所有测试,但$ promise() - > then()永远不会执行。
有什么建议吗?
public function testGet()
{
$promise = $this->client->requestAsync('GET','clients');
$promise->then(
function (ResponseInterface $response) {
$data = json_decode($response->getBody());
// this never get called
print_r($data);
}
);
$promise->wait();
}
答案 0 :(得分:1)
检查this issue,这是为了防止递归。您将需要在promise上调用wait,然后手动在promise队列上打钩
这对我有用(与流明一起使用)
use GuzzleHttp\Promise\FulfilledPromise;
class FulfilledPromiseTest extends TestCase
{
public function testResolveCallback()
{
// Instance objects first
$console = Mockery::mock('console');
$promise = new FulfilledPromise('success');
// Configure expectations
$console->shouldReceive('log')->once()->with('success');
// Execute test
$p = $promise->then(function($response) use($console) {
$console->log($response);
});
// Tick the promise queue to trigger the callback
$p->wait();
\GuzzleHttp\Promise\queue();
}
}