A well-tested code means better architecture. It is always easier to modify and improve.
Theoretically, it is possible to test an app without using automated testing tools, but in reality, it involves additional stresses like writing helper functions, command-line utilities, feeling anxious about how to run asynchronous tests and so on. Eventually, you will end up building your own custom test automation framework. No need to reinvent the wheel.
But choosing among testing frameworks turned out not to be an easy task. So, this article will be useful for those who face the same situation and are looking for a suitable testing tool to use.
In this article, I will explain the determinative reasons and whether we regret the choice now (a little spoiler – no, and here is why).
From the start when we looked for a testing framework, we had two main aims — the tool should cover our needs, in particular front-end and back-end testing, and it should be used and highly respected by the developers’ community. Mocha JS does both.
Unlike Jasmine, for example, Mocha is used with third party assertions, mocking, and spying tools. It also provides a wide variety of features allowing to create descriptive auto-tests, reports and even running automated tests each time the file was changed locally. And the list could go on!
Reason 1. Supports both Behavior Driven Development (BDD) and Test Driven Development (TDD)
No matter what testing process you use, Mocha will work well for you.
Reason 2. Has a number of installation options
The developers can select a way to install and use Mocha JS depending on the project needs. For example, in the case of using it for NodeJS, you can opt for installing Mocha either locally or globally by means of specific commands.
It is also possible to set up Mocha in the client-side and run tests directly in the web browser.
Reason 3. Supports any assertion library
Mocha, unlike other test frameworks, includes no built-in assertion library. An assertion library throws exceptions on failure.
No assertion library out of the box may seem like a strength and weakness at the same time. Mocha requires more configuration and, therefore, may seem intimidating for beginners. On the other hand, this makes Mocha test coverage very flexible.
Mocha is a library that allows running tests, while Chai contains helpful functionality to verify test results.
Using a combination of Mocha and Chai is a great option that provides living documentation for the specifications of the features of your products.
Reason 4. Makes asynchronous testing easy
There are three main methods you can use while testing asynchronous code with Mocha:
- by means of a callback function (the callback function is usually named “done”);
- by means of promises (in case you are developing in the environment supporting promises); and
- by means of async/await (for those environments supporting async functions).
Reason 5. Integrates fairly well with NodeJS
It is self-evident, as Mocha test framework runs on NodeJS itself.
As a result, Mocha’s simple syntax and speed makes testing your Node.js app an absolute pleasure.
Additionally, Mocha has many plugins and extensions to test unique scenarios.
Reason 6. Allows the use of a variety of reporters and customization
With Mocha, developers have a choice from multiple built-in test reporters.
You can choose such reporters as dot matrix, nyan, tap, landing strip, list, progress, and JSON. Additionally, you have an opportunity to create your own customized one as well. The test reporters having full color allows checking execution and output.
Reason 7. Is compatible with most web browsers
Mocha has both a browser build and a node command line program so you have a choice again – test in client and server-side environments.
As for the web browser, developers can run Mocha unit test on a number of widely used web browsers together with browser-specific methods and options.
Along with the mentioned benefits, there are several drawbacks we have faced with Mocha. Among them is the fact that Mocha runs all the tests in the same process, which means shared memory and no independence or isolation. It may cause various conflicts. Mocha also is unable to run tests in random order.
Nevertheless, we are quite satisfied with Chai Mocha as it helps us to run automated testing easily and effectively. In particular, it:
- allows growing our applications with certainty that the code is always checked and working,
- allows to make changes fast and free from anxiety,
- helps to shorten the development cycle as there is no need to manually check all parts of an app before pushing to production,
- provides early detection of bugs and broken functions thus an ability to eliminate them in a blink of the eye (it has already helped us more than once), and
- improves the growth and scalability of our products as code runs as expected.
As for the projects, Mocha works especially well for large projects where flexibility and customization are a major asset. But even if you have a small or medium project that involves frequent changes and lots of logic, testing with Mocha is still a great aid too.
Sure in real life it’s not always that easy. From the start, it may seem that it takes a lot of time to write automated tests, but it is definitely worth it. We have tested it out and suggest you do the same no matter what testing tool you finally choose.
Happy testing 🙂
And do not forget to subscribe to our blog to receive more insights and stories from our experience!