Тест Ларавелла. утверждать точную структуру JSON - PullRequest
0 голосов
/ 03 октября 2019

У меня есть проект API laravel. Существует много данных о безопасности, которые не должны отображаться для пользователей в ответах API. Мне нужен какой-то способ написать тесты, где я могу получить true, если только структура ответа точно такая же, как предварительно заданная структура в тесте.

Итак, если моя структура теста равна $structure = [ 'data' => ['_id', 'user' => ['name', 'email], 'title'];, но в ответ я получаю больше или меньше полей, мне нужно, чтобы этот тест не прошел.

В документации я нашел только:

assertJson - ожидание точных значений ключа =>, но мне нужны только ключи;assertJsonStructure - возвращает true, даже если некоторые поля отсутствуют или ответ содержит некоторые другие поля.

1 Ответ

0 голосов
/ 03 октября 2019

Использование Схема Opis JSON

$validator = new \Opis\JsonSchema\Validator();
$result = $validator->dataValidation($json, $schema);
PHPUnit::assertTrue($result->isValid(), "Mismatch json schema");

Для вашего случая подробнее о required и additionalProperties: https://docs.opis.io/json-schema/1.x/object.html#required

Ваша схема JSON может выглядеть так:

{
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer"
        }
      }
}
...