TinyBase logoTinyBase

Testing

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 documentation.test.ts file.

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.

The 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.