我正在尝试测试我的Laravel控制器但第二次执行请求:
$this->call('GET', "api/school");
总是返回:
Symfony\Component\HttpKernel\Exception\NotFoundHttpException:
但这是第一次没事。我可以在测试方法中多次调用$this->call
吗?我不想复制代码,如果是这样的话,有没有办法像Rspec上下文那样嵌套测试代码呢?
答案 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");