Nickolay Platonov
17 August 2021

Announcing technical preview of Siesta 6

Today we are thrilled to announce the availability of a technical preview of a new major version of our Siesta […]

Today we are thrilled to announce the availability of a technical preview of a new major version of our Siesta testing tool. The siesta-6.0.0-alpha is now available on npm.

Version 6 is a complete rewrite, using a modern technology stack and incorporating more than a decade of test driven development experience. This means no IE/legacy Edge support. This also means backward compatibility will not be fully preserved.

Why a full rewrite, breaking backward compatibility? We did not take this decision lightly. Siesta was created more than 11 years ago, roughly at the same time as Node.js and NPM, and has maintained backward compatibility ever since. Since the foundation of the Siesta code base was written to support IE6 (!), it is now very outdated when compared to latest ES language versions. Making any significant changes to it has become prohibitively complex. Fixing one part of the code, for example changing the class system from Joose to TypeScript, would require rewriting all source files. Same goes for the build process, which is currently using Perl scripts, Sencha CMD and manual file concatenation.

To move forward and keep up with the pace of modern Web evolution, we decided to do a complete rewrite. We will do our best to make the migration from 5 to 6 straightforward and simple.

Siesta 5 goes into maintenance mode

Siesta 5 will remain supported for the foreseeable future. All the Bryntum products have Siesta 5 test suites (thousands of tests in total) and we rely fully on Siesta 5 to keep our releases green and stable. We will continue to fix bugs and release patch versions as requested by our community and customers.

Changes in licensing

Siesta 5 exists as two packages – siesta-lite which is freely available on npm under a proprietary license, and the siesta itself – a paid version under a proprietary license.

In version 6, the names and licensing of these two packages will change. The previously free version siesta-lite becomes just siesta and it is now open-source (MIT licensed), available on npm as @bryntum/siesta. The commercial siesta package becomes siesta-plus and it will remain under the current proprietary license.

With this change, we aim to turn Siesta into a truly open source testing tool, with a broad community involvement.

Project status

We consider the server-side testing functionality to be stable and feature complete. Siesta 6 can be used right now to write tests for Node.js/Deno projects.

However, the released version is labeled as “alpha” because the browser-side testing has not yet reached feature parity with version 5. Tests can be launched in browsers, but there is no simulation of user actions on the web page. In the upcoming releases we will prioritise UI testing as well as building the graphical user interface for the Siesta web app.

To sum up – if you need to write tests for Node.js / Deno, please consider this release as a solid “beta”. For browser tests – you can only run generic tests without user action simulation, that’s why we labeled it an “alpha”.

What’s new

In version 6, Siesta becomes a truly ubiquitous testing tool – it can run tests in browsers, Node.js and Deno. Tests written for “isomorphic” code can be run unmodified in all these three target environments! One test tool to run them all 😈

In version 6 we are focusing on usage ergonomics. We have restyled the console output completely, it is now properly structured as a tree. The assertion list now goes below the test file name (in Siesta 5 it was above the test file). We have also added source code context for failed assertions, to make it easier to locate the failure. This is a relatively small addition, but one which greatly improves ergonomics.

During our 11 years of TDD experience, we found that when examining test results, most of the time is spent figuring out the difference between data objects being compared. Siesta 5 had a very weak implementation of this use case. In version 6 we have addressed it properly and Siesta now provides a precisely formatted diff view for deep equality assertions.

To illustrate the above, see the Siesta 5 screenshot for the isDeeply assertion below:

You can definitely say that not much attention was put into making the output easy to grasp. When writing the “old” Siesta we were busy dealing with Rhino as the server-side runtime and writing our own bundling stack. Colors are arbitrary, important information like the test file name is not highlighted, and the one-line JSON text output quickly becomes unreadable.

In contrast, please see the screenshot of the same assertion in Siesta 6:

Hopefully the picture talks for itself. It is worth pointing out that the deep diff provided by Siesta 6 remains readable for any input data size.

The deep equality assertion itself has also been greatly improved. It now supports comparing cyclic data structures, plus all built-in JavaScript data types like Map and Set.

We have also revamped the output colors, added themes and made them configurable. Siesta 6 now has three built-in themes – dark, light and universal. These themes are built using standard SASS, with plenty of variables to control the UI appearance, should you want to tweak the UI.

Next steps

Our immediate goal is to reach feature parity with version 5 in the area of Web testing. This includes building the graphical UI, adding support for simulating user actions, and the user actions recorder.

We also plan to add support for running tests directly on cloud platforms like Azure and AWS to achieve maximum parallelization. This feature will be added to the commercial package siesta-plus (aiming to be released in 2022).

If you have any particular feature you would like to see prioritized in Siesta, please leave a comment below or drop us a line in the issues tracker.

Stay tuned for future releases.

Happy testing!

Connect

Homepage: https://siesta.works

NPM package: https://www.npmjs.com/package/@bryntum/siesta

Github: https://github.com/bryntum/siesta

Discord channel: https://discord.gg/6mwJZGnwbq

 

Nickolay Platonov

Development Siesta Testing