Фоновый сценарий Symfony FOSTRestBundle Rest Behat / guzzle issue, Code 500, тело запроса становится нулевым при отправке

I had a similar issue named FeatureContext Behat issue, Code 400 Bad request, validation returning “This value should not be blank.” which was solved with the same answer.

Используя Behat, я хочу заполнить таблицу базы данных несколькими тестовыми объектами с помощью Rest API. При выполнении команды POST behat-api-extension каким-то образом теряет содержимое тела запроса, поэтому вместо этого отправляется null, и я в конечном итоге создаю либо пустые объекты, либо получаю ошибку кода 500, говорящую, что я не могу вставлять нулевые значения в REST объект.

У меня есть следующая функция Behat:

album.feature

Feature: Provide a consistent standard JSON API endpoint

  In order to build interchangeable front ends
  As a JSON API developer
  I need to allow Create, Read, Update, and Delete functionality

  Background:
    Given there are Albums with the following details:
      | title                              | track_count | release_date              |
      | The Dark Side of the Moon          | 12          | 1973-03-24T00:00:00+00:00 |
      | Back in Black                      | 9           | 1980-06-25T23:22:21+00:00 |
      | Thriller                           | 23          | 1982-11-30T11:10:09+00:00 |
    And the "Content-Type" request header is "application/json"
...

и следующую функцию:

FeatureContext.php

...

/**
 * @Given there are Albums with the following details:
 */
public function thereAreAlbumsWithTheFollowingDetails(TableNode $albums) {

    foreach ($albums->getColumnsHash() as $album) {
        $this->apiContext->setRequestBody(json_encode($album));
        $this->apiContext->requestPath("/api/album", "POST");
        $expectedResult = ["{",'"    status": "ok",',"}"];
        $this->apiContext->assertResponseBodyIs(new \Behat\Gherkin\Node\PyStringNode($expectedResult,0));
          echo 'passed.';
    }
}

...

Я получаю следующую ошибку:

  Expected response body "{
  "    status": "ok",
  }", got "{
      "code": 500,
      "message": "Unexpected error occured: An exception occurred while executing 
      'INSERT INTO Album (title, release_date, track_count) 
      VALUES (?, ?, ?)' with params [null, null, null]:\n\nSQLSTATE [23000, 515]: 
      [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]
      Cannot insert the value NULL into column 'title', table 'LUNCH_QR_TEST.dbo.Album'; 
      column does not allow nulls. INSERT fails.\n
      SQLSTATE [01000, 3621]: [Microsoft][ODBC Driver 11 for SQL Server]
      [SQL Server]The statement has been terminated."}".             
      (Imbo\BehatApiExtension\Exception\AssertionFailedException)

С print_r($this->request->getBody()->getContents()); в ApiContext.php я смог определить, что содержимое тела запроса для первого альбома: {"title":"The Dark Side of the Moon","track_count":"12","release_date":"1973-03-24T00:00:00+00:00"} до https://github.com/imbo/behat-api-extension/blob/develop/src/Context/ApiContext.php#L986.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
264
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В заголовке должен быть установлен перед отправка альбомов:

album.feature

  ...
  Background:
    Given the "Content-Type" request header is "application/json"
    And there are Albums with the following details:
  ...

Другие вопросы по теме