Laravel TestCase无法运行下一个请求

时间:2014-06-18 16:54:51

标签: php laravel phpunit

我正在尝试测试我的Laravel控制器但第二次执行请求:

$this->call('GET', "api/school");

总是返回:

Symfony\Component\HttpKernel\Exception\NotFoundHttpException: 

但这是第一次没事。我可以在测试方法中多次调用$this->call吗?我不想复制代码,如果是这样的话,有没有办法像Rspec上下文那样嵌套测试代码呢?

1 个答案:

答案 0 :(得分:1)

您的第二个电话的地址将附加到第一个电话。

$this->call()调用request()中的方法Symfony\Component\BrowserKit\Client,后者又调用getAbsoluteUri()

有趣的是getAbsoluteUri()导致您的测试第二次调用/api/school/api/school。这是来自symfony's source code的getAbsoluteUri()的描述。

  

获取URI并将其转换为绝对值,如果它不是绝对的。

从源代码看,似乎它需要你之前的调用,并且如果你的第二个请求不是绝对URI,则将新的调用附加到它。

所以要解决这个问题,你必须确保call()已经获得你的绝对URI,只需执行:

 $this->call('GET', "/api/school");