FOSRestBundle和Behat出现错误500

时间:2014-07-05 20:28:16

标签: symfony response behat fosrestbundle

我试图用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的响应处理知之甚少,不允许我调试它。

知道在哪里寻找(甚至更好,任何解决方案?)

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。要检查引发错误的原因,请在ExceptionController方法的catch部分的FOS / RestBundle包vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/Controller/ExceptionController.php的{​​{1}}中,尝试直接转储异常,即可。我会得到更多细节:

showAction()

答案 1 :(得分:0)

我在Symfony 4中遇到了同样的问题,因为我忘记在.env.test中设置环境变量了