Module tap¶
The tap module streamlines the testing of other modules. It allows writing of tests in the TAP protocol. The results from the tests can be parsed by standard TAP-analyzers so they can be passed to utilities such as prove. Thus one can run tests and then use the results for statistics, decision-making, and so on.
-
tap.
test
(test-name)¶ Initialize.
The result of
tap.test
is an object, which will be called taptest in the rest of this discussion, which is necessary fortaptest:plan()
and all the other methods.Параметры: - test-name (string) – an arbitrary name to give for the test outputs.
Return: taptest
Rtype: userdata
tap = require('tap') taptest = tap.test('test-name')
-
object
taptest
¶ -
taptest:
plan
(count)¶ Indicate how many tests will be performed.
Параметры: - count (number) –
Return: nil
-
taptest:
check
()¶ Checks the number of tests performed. This check should only be done after all planned tests are complete, so ordinarily
taptest:check()
will only appear at the end of a script.Will display
# bad plan: ...
if the number of completed tests is not equal to the number of tests specified bytaptest:plan(...)
.Return: true or false. Rtype: boolean
-
taptest:
diag
(message)¶ Display a diagnostic message.
Параметры: - message (string) – the message to be displayed.
Return: nil
-
taptest:
ok
(condition, test-name)¶ This is a basic function which is used by other functions. Depending on the value of
condition
, print „ok“ or „not ok“ along with debugging information. Displays the message.Параметры: - condition (boolean) – an expression which is true or false
- test-name (string) – name of test
Return: true or false.
Rtype: boolean
Example:
tarantool> taptest:ok(true, 'x') ok - x --- - true ... 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')
is equivalent totaptest:ok(false, 'x')
. Displays the message.Параметры: - test-name (string) – name of test
Return: true or false.
Rtype: boolean
-
taptest:
skip
(message)¶ taptest:skip('x')
is equivalent totaptest:ok(true, 'x' .. '# skip')
. Displays the message.Параметры: - test-name (string) – name of test
Return: nil
Example:
tarantool> taptest:skip('message') ok - message # skip --- - true ...
-
taptest:
is
(got, expected, test-name)¶ Check whether the first argument equals the second argument. Displays extensive message if the result is false.
Параметры: - got (number) – actual result
- expected (number) – expected result
- test-name (string) – name of test
Return: true or false.
Rtype: boolean
-
taptest:
isnt
(got, expected, test-name)¶ This is the negation of
taptest:is(...)
.Параметры: - got (number) – actual result
- expected (number) – expected result
- test-name (string) – name of test
Return: true or false.
Rtype: boolean
-
taptest:
isnil
(value, test-name)¶ -
taptest:
isstring
(value, test-name)¶ -
taptest:
isnumber
(value, test-name)¶ -
taptest:
istable
(value, test-name)¶ -
taptest:
isboolean
(value, test-name)¶ -
taptest:
isudata
(value, test-name)¶ -
taptest:
iscdata
(value, test-name)¶ Test whether a value has a particular type. Displays a long message if the value is not of the specified type.
Параметры: - value (lua-value) –
- test-name (string) – name of test
Return: true or false.
Rtype: boolean
-
taptest:
is_deeply
(got, expected, test-name)¶ Recursive version of
taptest:is(...)
, which can be be used to compare tables as well as scalar values.Return: true or false.
Rtype: boolean
Параметры: - got (lua-value) – actual result
- expected (lua-value) – expected result
- test-name (string) – name of test
-
Пример¶
To run this example: put the script in a file named ./tap.lua, then make
tap.lua executable by saying chmod a+x ./tap.lua
, then execute using
Tarantool as a script processor by saying ./tap.lua.
#!/usr/bin/tarantool
local 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()
The output from the above script will look approximately like this:
TAP version 13
1..2
ok - 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: end
ok - some subtests for test2