Проверки утверждений
Описывайте ожидаемое поведение.
«Проверки утверждений» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Для чего нужны проверки
Проверка — основа теста. Она утверждает факт, который должен быть истинным. Если это так, тест продолжается. Если нет, busted фиксирует ошибку с полезным сообщением.
busted использует библиотеку luassert, доступную через глобальную таблицу assert.
assert.are.equal(4, 2 + 2)are.equal
assert.are.equal проверяет равенство с помощью оператора ==. Первый аргумент — ожидаемое значение, второй — фактическое.
Это работает для чисел, строк и логических значений, но для таблиц сравнивается идентичность, а не содержимое.
assert.are.equal("hello", greet())
assert.are.equal(10, count)are.same для таблиц
Для глубокого сравнения содержимого таблиц используйте assert.are.same. Эта проверка рекурсивно убеждается, что две таблицы содержат одинаковые значения.
Используйте same для структур данных, а equal — для примитивов или проверок идентичности.
assert.are.same({1, 2, 3}, split("1,2,3"))
assert.are.same({x = 1}, point)Истинностные значения
assert.is_true и assert.is_false проверяют точные логические значения. assert.is_truthy принимает любое значение, кроме nil и false.
Выбирайте строгий вариант, когда ожидаете именно логический результат.
assert.is_true(user.active)
assert.is_truthy(find("x"))
assert.is_false(list:isEmpty())Проверка nil
assert.is_nil проверяет, что значение равно nil, а assert.is_not_nil — что оно присутствует. Такие проверки часто используются при проверке результатов поиска.
Они яснее выражают намерение, чем сравнение с nil с помощью equal.
assert.is_nil(map["missing"])
assert.is_not_nil(map["found"])Отрицание с помощью is_not
Большинство проверок можно инвертировать, вставив is_not или используя форму are_not. Это выражает требование, чтобы значения различались.
Например, assert.are_not.equal проходит, когда два значения различаются.
assert.are_not.equal(1, 2)
assert.is_not_nil(result)Проверка ошибок
Чтобы проверить, что код вызывает ошибку, оберните его в функцию и передайте её в assert.has_error. busted вызывает эту функцию и подтверждает, что она выбросила ошибку.
Вы также можете проверить сообщение об ошибке, передав ожидаемую строку вторым аргументом.
assert.has_error(function()
withdraw(-5)
end, "amount must be positive")has_no.errors
Противоположная проверка — assert.has_no.errors. Она проходит, когда обёрнутая функция выполняется без ошибок.
Это полезно, чтобы подтвердить, что вызов в штатном сценарии не приводит к сбою, даже если Вы не проверяете его возвращаемое значение.
assert.has_no.errors(function()
parse("valid input")
end)Пользовательские сообщения об ошибках
К большинству проверок можно добавить сообщение, чтобы понятнее объяснить причину сбоя. Передайте его дополнительным аргументом, чтобы отчёт описывал ожидаемый результат.
Понятные сообщения превращают загадочный сбой в проблему, которую можно исправить.
assert.is_true(ok, "login should succeed")Сопоставление с модификаторами
luassert предоставляет модификаторы и сопоставители для более гибких проверок. Например, assert.matches проверяет строку по шаблону Lua.
Это удобно, когда точная проверка равенства слишком строга для переменного результата.
assert.matches("%d%d%d%d", get_year())
assert.matches("error", log_line, 1, true)Выбор подходящей проверки
Для ясности выбирайте наиболее конкретную проверку. Используйте same для таблиц, equal для примитивов, has_error для ошибок, а проверки истинности — для логических значений.
Конкретные проверки формируют более полезные сообщения об ошибках и ускоряют отладку.
describe("queue", function()
it("dequeues in order", function()
assert.are.same({"a", "b"}, q:drain())
end)
end)Быстрая проверка
Проверьте, насколько Вы поняли проверки busted.
Итоги
luassert предоставляет таблицу assert для busted. Используйте are.equal для примитивов, are.same для глубокого сравнения таблиц, а проверки истинности или nil — в подходящих случаях.
Проверяйте ошибки с помощью has_error, а успешное выполнение — с помощью has_no.errors. Используйте отрицание с is_not и добавляйте сообщения, чтобы отчёты были понятнее.
Часто задаваемые вопросы
Урок «Проверки утверждений» бесплатный?
Да — полный текст урока «Проверки утверждений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Проверки утверждений»?
Описывайте ожидаемое поведение. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Проверки утверждений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужны тесты
- Блоки describe и it
- Проверки утверждений
- Имитации и шпионы