Ларавел 5.6. PHPUnit. Метод assertJson (), не зависящий от порядка

В моей бизнес-логике меня не волнует порядок элементов.

Вот мой пример теста

$this->getJson('/api/order-attempts')
->assertJson([
'data' => [
['status' => 'error'],
['status' => 'error'],
['status' => 'confirmed'],
['status' => 'confirmed'],
['status' => 'confirmed'],
],
])->isOk();

Это терпит неудачу время от времени только из-за заказа. Я не хочу ставить сортировку в API, потому что мне это не нужно.

Это возможно assertJsonIgnoringOrder() каким-то образом?

0

Решение

Существует широкий спектр JSON-утверждений, и вы можете построить из этого то, что ищете.

Например, вы можете утверждать для частей JSON, используя assertJsonFragment() или просто правильная структура, игнорируя фактический контент, используя assertJsonStructure().

Например, вы можете посмотреть, содержит ли json правильное количество элементов с ключом status с помощью assertJsonCount($number, $key).

К сожалению, нет конкретного утверждения, которое уже соответствует вашему требованию, по крайней мере, по умолчанию. Там может быть какая-то библиотека, предоставляющая это для вас.

0

Другие решения

Вы можете проверить структуру и выравнивание JSON с помощью assertSame()

Например попробуйте это

 $this->assertSame(json_encode([
'data' => [
['status' => 'error'],
['status' => 'error'],
['status' => 'confirmed'],
['status' => 'confirmed'],
['status' => 'confirmed'],
]),$response->getContent(), '');
0

По вопросам рекламы [email protected]