0Pricing
Lua Academy · Урок

Проверки утверждений

Описывайте ожидаемое поведение.

«Проверки утверждений» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны тесты
  2. Блоки describe и it
  3. Проверки утверждений
  4. Имитации и шпионы
← Назад к Lua Academy