Testing is a first-class citizen in TinyBase, as you may see from the high coverage it enjoys.
All testing is coordinated by Jest, and test are all found in the
test directory within the project.
The unit tests (in the
unit subdirectory), given their names and test titles, should be self-explanatory - there's typically one or two per main module. Note that the tests are run against the debug build of the modules, so they require the
compileForTest task to have been run, as described in the Developing TinyBase guide.
Interestingly, the unit tests also include testing all the code snippets in the API documentation and the guides. This means that it's guaranteed that all example code will run correctly, and also (given the number of docs) provides a little bit of extra coverage. The magic to do this (which is alarmingly dependent on regular expressions) is in the
There are a few helper functions for the tests. These do things like track listener calls and enumerate complex object structures so they can be easily asserted with.
perf subdirectory contains the performance tests. These benchmark large numbers of operations to check for time-complexity. Note that TinyBase performance tests do not have particularly aggressive pass or fail thresholds per se, since the absolute numbers will depend on underlying hardware. However, every test will render an ASCII chart which should be relatively flat. The idea here is that you can check visually that you haven't introduced a high time-complexity algorithm bug. For example:
Grow store, different table to index with multiple row count, µs per row First: 16.3 µs per row Last: 3.61 µs per row Min: 2.76 µs per row Max: 29.89 µs per row Avg: 7.33 µs per row 90.00 ┼─────────────────────────────────────── 84.00 ┤ 78.00 ┤ 72.00 ┤ 66.00 ┤ 60.00 ┤ 54.00 ┤ 48.00 ┤ 42.00 ┤ 36.00 ┤ 30.00 ┤╭╮ 24.00 ┤││ ╭╮ 18.00 ┼╯│ ││ ╭╮ 12.00 ┤ ╰╮ ╭╯│ ╭╮ ││ ╭╮ 6.00 ┼──╰───╯─╰────╯╰───╯╰──────────╯╰╮──╭─── 0.00 ┤ ╰──╯
Finally, the end-to-end tests in the
e2e subdirectory run Puppeteer scripts to drive simple transactions through the demos on the TinyBase website. These are good ways of catching major regressions when more complex apps are put together.