Метод Laravel TestCase seeJson() ищет массив

Я использую Laravel 5.1 Testsuite.

Теперь, я тестирую свой json api с помощью метода seeJson(). Этот метод ожидает массив, например:

->seeJson(['created' => 1]);

Но мой json api всегда возвращает объект json или массив с объектами json, в этом случае:

Response::json(['created' => 1], 200);

В приведенном выше примере my json api возвращает:

{created: 1}

Но seeJson() ищет данный массив точно:

[created: 1]

Я никогда не пропускаю тесты с совпадением. Как я могу сопоставить?

Ответ 1

Я получил аналогичную ошибку.

Невозможно найти фрагмент JSON [ "created": 1] внутри [{ "created": "1" }......]

Глядя на исходный код, эта ошибка записывается как:

"Unable to find JSON fragment [{$expected}] within [{$actual}]."

Итак, [ ] не включены в поиск

Response::json(['created' => 1], 200);

приводит к:   {"created":1}

Когда я выгружаю содержимое ответа в методе seeJson(), все значения заключаются в кавычки. Попробуйте изменить свой тест на:

->seeJson(['created' => '1']);

Ответ 2

seeJson выполните строгие сравнения, поэтому:

'created' => 1 (Interpreted as integer)

Ошибка, потому что JSON, возвращаемый вашим API, фактически

"created":"1" (interpreted as string)

Ответ 3

используйте json, как это.

->seeJson((object)['created' => 1]);