@KuzmenkoArtem

Как вы тестируете сортировку в Laravel?

Я пытаюсь сделать это так
$books = factory(Book::class, 10)->create();

        $books = $books->sortBy('title')->values()->all();

        $response = $this->get('api/v1/books?sort[]={"field":"title","direction":"asc"}');

        $response->assertJson([
            'books' => $books
        ]);


Тест не проходит, хотя сам роут выдает правильные данные.
Проблема в том что строка
$books = $books->sortBy('title')->values()->all();

Почему-то перемещает ключи
"title": "Aut omnis est.",
"author": "Jacquelyn Crona V",
"updated_at": "2019-05-15 19:14:09",
"created_at": "2019-05-15 19:14:09",
"id": 1

В данном случае id ушел в конец, а в сверяемых данных он в начале
Как бы можно было это по красивому решить?
Спасибо!
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
$this->assertEquals($books->pluck('id')->toArray(), Arr::pluck($response['books'], 'id'));

Под термин "красиво" не подпадает, но работает. Второй вариант - написать свой constraint для order'а, типа
$this->assertOrder([
    new SimpleOrderComparator('title', Comparator::ASC_ORDER)
], $response['books']);

и убрать вообще $books - я так делал на работе, но там orderBy'и были намного сложнее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы