Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модуль tap

Общие сведения

Модуль tap упрощает тестирование других модулей. Он позволяет писать тесты с использованием TAP-протокола. Результаты тестов могут быть обработаны стандартными TAP-анализаторами и переданы таким утилитам, как prove. Таким образом, можно запускать тесты и использовать их результаты для сбора статистики, принятия решений и т. д.

Справочник по API

Ниже приведен перечень функций и объектов модуля tap.

Имя

Назначение

tap.test()

Инициализация

taptest:test()

Создание подтеста и вывод результатов

taptest:plan()

Указание количества выполняемых тестов

taptest:check()

Проверка количества выполненных тестов

taptest:diag()

Вывод диагностического сообщения

taptest:ok()

Вычисление условия и вывод сообщения

taptest:fail()

Вычисление условия и вывод сообщения

taptest:skip()

Вычисление условия и вывод сообщения

taptest:is()

Проверка равенства двух аргументов

taptest:isnt()

Проверка неравенства двух аргументов

taptest:is_deeply()

Рекурсивная проверка равенства двух аргументов

taptest:like()

Проверка соответствия аргумента шаблону

taptest:unlike()

Проверка несоответствия аргумента шаблону

taptest:isnil() taptest:isstring() taptest:isnumber() taptest:istable() taptest:isboolean() taptest:isudata() taptest:iscdata()

Проверка принадлежности значения к определенному типу

taptest.strict

Флаг: true, если сравнения с nil должны быть строгими

tap.test(test-name)

Инициализация.

Результатом tap.test является объект, который будет называться taptest в ходе данного разбора, что необходимо для taptest:plan() и всех остальных методов.

Параметры:

  • test-name (string) — произвольное имя для выводимых результатов теста

Возвращает

taptest

Тип возвращаемого значения

table

Пример:

tap = require('tap')taptest = tap.test('test-name')

taptest

taptest:test(test-name, func)

Создание подтеста (если не указан аргумент func) или (если указаны все аргументы) создание подтеста, выполнение тестовой функции и вывод результата.

См. пример.

Параметры:

  • test-name (string) — произвольное имя для выводимых результатов теста
  • func (function) — тестовая логика для выполнения

Возвращает

taptest

Тип возвращаемого значения

userdata or string

taptest:plan(count)

Указание количества проводимых тестов.

Параметры:

  • count (number) — количество тестов

Возвращает

nil

taptest:check()

Проверка количества выполненных тестов.

Выведенный результат будет включать в себя сообщение: # bad plan: ..., если количество выполненных тестов не равно количеству тестов, указанному в taptest:plan(...). (Это собственная функция Tarantool: сообщения типа "bad plan" не входят в стандарт TAP13.)

Такую проверку следует проводить только по завершении всех запланированных тестов, поэтому, как правило, taptest:check() появится лишь в конце скрипта. Тем не менее в качестве расширения Tarantool, taptest:check() может появиться в начале любого подтеста. Таким образом, проверка появится в трех случаях:

  • при вызове taptest:check() в конце скрипта,
  • при вызове функции, которая завершается вызовом taptest:check(),
  • или при вызове taptest:test('...', subtest-function-name), где subtest-function-name не должна завершаться вызовом taptest:check(), так как он может быть вызван после завершения подтеста.

Возвращает

true или false

Тип возвращаемого значения

boolean

taptest:diag(message)

Отображение сообщения диагностики.

Параметры:

  • message (string) — отображаемое сообщение

Возвращает

nil

taptest:ok(condition, test-name)

Это базовая функция, которая используется другими функциями. В зависимости от условия condition, выводится 'ok' или 'not ok' вместе с отладочной информацией. Отображается сообщение.

Параметры:

  • condition (boolean) — выражение, принимающее значение true или false
  • test-name (string) — имя теста

Возвращает

true или false

Тип возвращаемого значения

boolean

Пример:

tarantool> tap = require('tap')---...tarantool> taptest = tap.test('test-name')TAP version 13---...tarantool> taptest:ok(1 + 1 == 2, 'X')ok - X---- true...

taptest:fail(test-name)

taptest:fail('x') – аналог taptest:ok(false, 'x'). Отображается сообщение.

Параметры:

  • test-name (string) — имя теста

Возвращает

true или false

Тип возвращаемого значения

boolean

taptest:skip(message)

taptest:skip('x') – аналог taptest:ok(true, 'x' .. '# skip'). Отображается сообщение.

Параметры:

  • message (string) — отображаемое сообщение

Возвращает

nil

Пример:

tarantool> taptest:skip('message')ok - message # skip---- true...

taptest:is(got, expected, test-name)

Проверка равенства первого аргумента второму аргументу. Отображается подробное сообщение, если результатом будет false (ложь).

Параметры:

  • got (number) — фактический результат
  • expected (number) — ожидаемый результат
  • test-name (string) — имя теста

Возвращает

true или false

Тип возвращаемого значения

boolean

taptest:isnt(got, expected, test-name)

Отрицание taptest:is().

Параметры:

  • got (number) — фактический результат
  • expected (number) — ожидаемый результат
  • test-name (string) — имя теста

Возвращает

true или false

Тип возвращаемого значения

boolean

taptest:is_deeply(got, expected, test-name)

Рекурсивная версия taptest:is(...), которую можно использовать для сравнения как таблиц, так и скалярных значений.

Параметры:

  • got (lua-value) — фактический результат
  • expected (lua-value) — ожидаемый результат
  • test-name (string) — имя теста

Возвращает

true или false

Тип возвращаемого значения

boolean

taptest:like(got, expected, test-name)

Проверка совпадения строки с шаблоном. Ok, если найдено совпадение.

Параметры:

  • got (lua-value) — фактический результат
  • expected (lua-value) — шаблон
  • test-name (string) — имя теста

Возвращает

true или false

Тип возвращаемого значения

boolean

Пример:

test:like(tarantool.version, '^[1-9]', "version")

taptest:unlike(got, expected, test-name)

Отрицание taptest:like().

Параметры:

  • got (number) — фактический результат
  • expected (number) — шаблон
  • test-name (string) — имя теста

Возвращает

true или false

Тип возвращаемого значения

boolean

taptest:isnil(value, message, extra)

taptest:isstring(value, message, extra)

taptest:isnumber(value, message, extra)

taptest:istable(value, message, extra)

taptest:isboolean(value, message, extra)

taptest:isudata(value, utype, message, extra)

taptest:iscdata(value, ctype, message, extra)

Проверка соответствия значения определенному типу. Отображается длинное сообщение, если значение не принадлежит указанному типу.

Параметры:

  • value (lua-value) — значение, тип которого проверяется
  • utype (string) — тип данных, которому должно соответствовать переданное значение (для taptest:isudata())
  • ctype (string) — тип данных, которому должно соответствовать переданное значение (для taptest:iscdata())
  • message (string) — текст, который будет показан пользователю в случае ошибки

Возвращает

true или false

Тип возвращаемого значения

boolean

Пример:

test:iscdata(slab_info.quota_size, ffi.typeof('uint64_t'),'memcached.slab.info().quota_size returns a cdata')

taptest.strict

Установите taptest.strict = true, если taptest:is(), taptest:isnt() и taptest:is_deeply() должны строго сравнивать значения со значением nil. Установите taptest.strict = false, если nil и box.NULL должны интерпретироваться одинаково.

По умолчанию – false. Например, taptest:is_deeply({a = box.NULL}, {}) вернет false тогда и только тогда, когда задано taptest.strict = true.

Начиная с версии 2.8.3 значение taptest.strict наследуется во всех подтестах:

t = require('tap').test('123')t.strict = truet:is_deeply({a = box.NULL}, {}) -- falset:test('subtest', function(t)    t:is_deeply({a = box.NULL}, {}) -- тоже falseend)

Пример

Для выполнения данного примера поместите скрипт в файл под названием ./tap.lua, затем сделайте tap.lua выполняемым файлом с помощью команды chmod a+x ./tap.lua, а затем выполните его, используя Tarantool в качестве обработчика скриптов после выполнения команды ./tap.lua.

#!/usr/bin/tarantoollocal tap = require('tap')test = tap.test("my test name")test:plan(2)test:ok(2 * 2 == 4, "2 * 2 is 4")test:test("some subtests for test2", function(test)    test:plan(2)    test:is(2 + 2, 4, "2 + 2 is 4")    test:isnt(2 + 3, 4, "2 + 3 is not 4")end)test:check()

Результатом вышеприведенного скрипта будет примерно следующее:

TAP version 131..2ok - 2 * 2 is 4    # Some subtests for test2    1..2    ok - 2 + 2 is 4,    ok - 2 + 3 is not 4    # Some subtests for test2: endok - some subtests for test2