Пользователь просматривает журнал, пока в него поступают новые записи. На второй странице появляются элементы с первой, а некоторые пропадают. Проблема часто связана с неустойчивым порядком или смещением относительно меняющегося набора. Проверка начинается с формального определения того, какой снимок пользователь должен видеть.
Что подготовить
- Поля сортировки, уникальный идентификатор и правила обработки одинаковых значений.
- Размер страницы, формат курсора либо смещения и требования к согласованности просмотра.
- Набор записей с одинаковыми датами, удалениями и вставками между запросами.
Порядок работы
- Определите стабильный полный порядок. Если дата не уникальна, добавьте согласованный дополнительный ключ.
- Проверьте пустой список, точное кратное размера страницы и последнюю неполную страницу.
- Получите первую страницу, добавьте запись перед ее границей и запросите следующую. Повторите с удалением и изменением сортируемого поля.
- Проверьте курсор с неподходящим фильтром, поврежденное значение и окончание доступных данных. Правила ошибки должны быть явными.
- Соберите все страницы и сравните множество идентификаторов с ожидаемым снимком либо описанной моделью живого списка.
Разобранный пример
Десять записей имеют одну дату. Сортировка только по дате допускает разный порядок между запросами. Пара «дата, id» задает полный порядок, а курсор хранит оба значения. Проверка вставляет новую запись с той же датой и подтверждает заявленное правило перехода.
Как проверить результат
- Для неизменного набора нет дублей, пропусков и случайной перестановки равных значений.
- Ограничение доступа применяется ко всем страницам, включая запрос по сохраненному курсору.
- Количество элементов и признак следующей страницы согласованы на границах.
Если что-то пошло не так
Если нужна согласованность снимка, а источник ее не поддерживает, это ограничение нельзя исправить одним интерфейсным тестом. Выберите версионированный срез или явно опишите поведение живого списка. Не удаляйте дубли на клиенте как единственную защиту от пропусков.
Промпт для разбора ваших материалов
Разбери контракт пагинации и предложи таблицу граничных сценариев. Для каждого укажи исходные записи, изменение между запросами и ожидаемые идентификаторы. Отдельно оцени устойчивость сортировки и согласованность курсора с фильтрами.Частые вопросы
Курсор всегда лучше смещения?
Он решает некоторые проблемы изменения набора, но требует подходящего порядка и контракта. Выбор зависит от сценария навигации.
Можно ли сортировать только по времени?
Если время не уникально, добавьте устойчивый ключ. Иначе порядок равных записей может оставаться неопределенным.
Материал библиотеки решений Ильи Тарасова / TarasovWeb.
Сценарий с добавлением записи между страницами
Создайте небольшую коллекцию с явно заданным порядком. Получите первую страницу, затем добавьте запись в начало списка и запросите следующую. Отметьте, появились ли повторы или пропуски. Для интерфейса живой ленты это может быть ожидаемым свойством выбранной модели, но для полного экспорта такой результат часто неприемлем.
Добавьте записи с одинаковым значением основного поля сортировки. Если сортировка идёт только по времени создания, равные значения требуют дополнительного устойчивого признака порядка. Иначе две одинаковые по первому ключу записи могут менять взаимное положение между запросами. Проверяйте набор идентификаторов, а не только число элементов на экране.
Для курсора подготовьте неверное значение, курсор от другого фильтра и продолжение после удаления пограничной записи. Поведение должно быть определено контрактом: понятная ошибка, повторный старт или допустимое продолжение. Нельзя молча интерпретировать чужой курсор как подходящий, если он меняет область данных.
Отдельно договоритесь, что означает число «всего»: точный размер снимка, текущая оценка или просто признак следующей страницы. Если данные меняются, эти значения отвечают на разные вопросы. Для выгрузки, которой требуется полнота, рассмотрите стабильный снимок или другой согласованный механизм обхода. Для обычной ленты документируйте допустимые изменения и проверяйте отсутствие бесконечного повторения одной страницы.
О проекте
Практическая библиотека Ильи Тарасова и TarasovWeb. Telegram-канал · Личная страница · ВКонтакте.
#tarasovweb #ИльяТарасов
