Как проверить ограничения по длине текста сообщения (меньше и больше 500 символов)?
Что проверяют
Знание граничных значений и классов эквивалентности на конкретном числе. Дальше интервьюер смотрит, вспомните ли вы, что «символ» считается по-разному в браузере, на сервере и в базе. Частый уточняющий вопрос: где именно должно срабатывать ограничение и что будет, если его обойти.
Как отвечать
Сначала уточните требование: входит ли 500 в допустимое, есть ли минимум, обрезаются ли пробелы по краям, считаются ли переводы строк.
Дальше классы и границы:
- классы: пусто, от 1 до 500, больше 500;
- граничные значения: 0, 1, 499, 500, 501. Плюс 10 000 символов: сервер не должен падать или тормозить;
- только пробелы: строка из 500 пробелов формально укладывается в лимит, но обычно должна считаться пустой;
- состав символов: кириллица, эмодзи, переносы строк. Атрибут
maxlengthуtextareaсчитает кодовые единицы UTF-16, поэтому эмодзи часто занимает два символа из 500, а перенос строки при отправке может стать\r\n. Счётчик на экране и проверка на сервере должны давать одно число; - способ ввода: набор с клавиатуры и вставка из буфера. При вставке 600 символов браузер молча обрежет текст по
maxlength, и это надо зафиксировать как ожидаемое поведение или как баг; - обход клиента: убрать
maxlengthв DevTools или отправить 501 символ через Postman. Сервер обязан вернуть ошибку валидации, а не сохранить или обрезать текст без предупреждения.
Проверьте и хранение: сохранённое сообщение из 500 символов читается целиком. В некоторых базах длина колонки задаётся в байтах, а кириллица в UTF-8 занимает по два байта, так что лимит в 500 «символов» ломается на 250 русских буквах.
Длинную строку не набирают руками: "я" * 500 в Python, pre-request скрипт в Postman или фикстура в автотесте.
Где спотыкаются
Проверяют 100 и 700 вместо 499, 500 и 501. Середина класса ничего не говорит о том, как написано условие: < или <=.
Тестируют только латиницей. Ошибки подсчёта всплывают на эмодзи, кириллице и переносах строк, то есть на реальных сообщениях.
Останавливаются на интерфейсе. Ограничение через maxlength защищает только от честного пользователя, и без проверки API длинное сообщение спокойно попадёт в базу.