Ошибка 500 с FOSRestBundle и Behat

#symfony #response #behat #fosrestbundle

#symfony #ответ #behat #fosrestbundle

Вопрос:

Я пытаюсь протестировать свой API с помощью Behat, но получаю 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
  

Для моего контроллера я решил расширить FOSRestController, используя get / cget /… синтаксис.
Вот пример действия.

 <?php

namespace RcpIndexBundleCoreBundleController;

use SymfonyComponentHttpFoundationRequest;
use FOSRestBundleRequestParamFetcher;
use FOSRestBundleControllerAnnotationsQueryParam;
use FOSRestBundleControllerAnnotationsRoute;
use FOSRestBundleControllerFOSRestController;
use FOSRestBundleRoutingClassResourceInterface;
use NelmioApiDocBundleAnnotationApiDoc;

use RcpIndexBundleCoreBundleFormRcpType;

/**
 * @package RcpIndexBundleCoreBundleController
 */
class RcpController extends FOSRestController implements ClassResourceInterface
{
    use PaginatorTrait;

    /**
     * Get rcp list
     *
     * @param ParamFetcher $paramFetcher
     *
     * @return FOSRestBundleViewView
     *
     * @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="RcpIndexBundleCoreBundleEntityRcp",
     *   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
  

И я получаю следующую ошибку: «Текущий код статуса ответа равен 500, но ожидается 200».

Я пытался ее отладить, но код выполняется хорошо, а метод $this-> view() не выдает уловимого исключения (и после небольшого поиска метод View::create () работает хорошо).

Я думаю, что возврат «cgetAction» хорош, но это может быть связано с тем, как обрабатывается ответ. Мои плохие знания об обработке ответов Symfony не позволяют мне отладить это.

Есть идеи, где искать (или, что еще лучше, любое решение?)

Комментарии:

1. проверьте приложение / журналы / файлы, чтобы увидеть, ошибка ли это Symfony. И покажите ваш файл контекста.

Ответ №1:

У меня были проблемы такого же рода. Чтобы проверить, что вызывает ошибку, в ExceptionController пакете FOS / RestBundle vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/Controller/ExceptionController.php , в разделе catch showAction() метода, попробуйте напрямую удалить исключение, вы получите более подробную информацию:

     } catch (Exception $e) {
        var_dump($e);
        die();
        $message = 'An Exception was thrown while handling: ';
        $message.= $this->getExceptionMessage($exception);
        $response = new Response($message, Codes::HTTP_INTERNAL_SERVER_ERROR, $exception->getHeaders());
    }
  

Ответ №2:

У меня была такая же проблема с Symfony 4, потому что я забыл установить переменные среды в .env.test