我试图用Behat测试我的API,但每次回复都会得到500。
API在Behat之外正常工作。
以下是我的config.yml文件的一部分:
fos_rest:
param_fetcher_listener: true
body_listener: true
routing_loader:
include_format: false
format_listener:
rules:
- { priorities: ['json','html'], fallback_format: json }
view:
view_response_listener: true
failed_validation: 422
serializer:
serialize_null: true
disable_csrf_role : IS_AUTHENTICATED_ANONYMOUSLY
对于我的控制器,我选择使用get / cget / ...语法扩展FOSRestController。 这是一个行动的例子。
<?php
namespace RcpIndex\Bundle\CoreBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Request\ParamFetcher;
use FOS\RestBundle\Controller\Annotations\QueryParam;
use FOS\RestBundle\Controller\Annotations\Route;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Routing\ClassResourceInterface;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use RcpIndex\Bundle\CoreBundle\Form\RcpType;
/**
* @package RcpIndex\Bundle\CoreBundle\Controller
*/
class RcpController extends FOSRestController implements ClassResourceInterface
{
use PaginatorTrait;
/**
* Get rcp list
*
* @param ParamFetcher $paramFetcher
*
* @return \FOS\RestBundle\View\View
*
* @QueryParam(name="page", requirements="\d+", default="1", description="Current page index")
* @QueryParam(name="per_page", requirements="\d+", default="50", description="Number of elements displayed per page")
*
* @ApiDoc(
* section="Rcp",
* description="Get rcp list",
* output="RcpIndex\Bundle\CoreBundle\Entity\Rcp",
* statusCodes={
* 200="OK",
* 400="Bad request"
* }
* )
*/
public function cgetAction(ParamFetcher $paramFetcher)
{
list($offset, $limit) = $this->getStartAndLimitFromParams($paramFetcher);
$entities = $this->get('rcpindex.manager.rcp')->findAllInRange($offset, $limit);
return $this->view($entities, 200);
}
//...
然后,有我的Behat功能。我使用Behat \ MinkExtension和Sanpi \ Behatch作为上下文提供者。
Feature: Rcplist
Scenario: Get empty list
Given I add "CONTENT_TYPE" header equal to "application/json"
When I send a GET request on "/api/1.0/rcps"
Then the response status code should be 200
我收到以下错误:&#34;当前响应状态代码为500,但预计为200。&#34;
我尝试调试它但代码运行良好且$ this-&gt; view()方法没有抛出任何可捕获的异常(并且稍微搜索一下,View :: create()方法运行良好)。
我想&#34; cgetAction&#34;返回是好的,但它可能是处理响应的方式。 我对Symfony的响应处理知之甚少,不允许我调试它。
知道在哪里寻找(甚至更好,任何解决方案?)
答案 0 :(得分:0)
我遇到了同样的问题。要检查引发错误的原因,请在ExceptionController
方法的catch部分的FOS / RestBundle包vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/Controller/ExceptionController.php
的{{1}}中,尝试直接转储异常,即可。我会得到更多细节:
showAction()
答案 1 :(得分:0)
我在Symfony 4中遇到了同样的问题,因为我忘记在.env.test
中设置环境变量了