Beruflich Dokumente
Kultur Dokumente
[Updated 2018]
When starting development on a new front end project, I always ask myself two
questions: “Which JavaScript unit testing frameworks should I use?” and “Should I even
spend time adding tests?”
My colleagues often write about how unit tests are great for peace of mind and reducing
software errors. So I always make the time to test. But which framework should you
choose for your project? Before rushing into any decisions, I investigated five of the most
popular JavaScript unit testing frameworks so you can decide which one is best for you.
One of the most popular JavaScript unit testing frameworks, Jasmine provides you with
everything you need out-of-the-box.
Comes with assertions, spies, and mocks, so pretty much everything you may need
to start developing your unit tests. Jasmine makes the initial setup easy and you can still
add libraries if you really require unit functionality
Globals make it easy to start adding tests to your app right away. Although I dislike
globals, Jasmine provides developers with everything you need out-of-the box, and
there isnʼt much inconsistency
I found the standalone version made it easy to see just how everything is setup and
you can start playing around with it right away
Integrates with Angular 1 and Angular 2 alongside many popular libraries today
My thoughts on Jasmine
Iʼm not a fan of having the globals populating the environment, so Jasmine does lose a
few points in my book there. Otherwise, it has good variety of features out of the box. It
does seem slightly “older” than the other frameworks on this list but that is not
necessarily a bad thing and any pain points would have been encountered by others,
meaning they should be easy to resolve.
AVA
AVA doesnʼt create any globals for you, therefore you can control more easily what
you use. I think this brings extra clarity to the tests ensuring that you know exactly what
is happening
Taking advantage of the async nature of JavaScript makes testing extremely
beneficial. The main benefit is minimizing the wait time between deployments
Contains a simple API which provides you with only what you need. This can be nice if
you would like mocking support, but youʼll have to install a separate library
Snapshot testing is provided via jest-snapshot which is great when youʼd like to know
when your applicationʼs UI changes unexpectedly.
My thoughts on AVA
Avaʼs “highly opinionated” minimalist approach, alongside them not populating the
global environment, earns itself big points in my book. The simple API makes tests clear.
AVA is certainly a library you should check out when selecting your JavaScript unit
testing frameworks.
Tape
The most minimal of all the frameworks on the list, Tape is straight to the point and
provides you with the bare essentials.
Just like AVA, Tape doesnʼt support globals, instead requiring you to include them
yourself. This is nice as it doesnʼt pollute the global environment
Tape contains no setup/teardown methods. Instead it opts for a more modular system
where you will need to define setup code explicitly in each test making each test more
clear. It also stops the state being shared between tests
Typescript/coffeescript/es6 support
Easy and fast to get up and running, Tape is a JavaScript file that you run anywhere
thatʼs running JavaScript, without an overloading amount of configuration options
My thoughts on Tape
Tape contains an even lower-level, less feature rich API than AVA, and is proud of it.
Tape has kept everything simple, giving you only what you need and nothing more. This
is why Tape rates highly in my book and one of the best JavaScript unit testing
https://raygun.com/blog/javascript-unit-testing-frameworks/ 3/6
24/08/2019 JavaScript unit testing frameworks: Comparing Jasmine, Mocha, AVA, Tape and Jest [2018] · Raygun Blog
frameworks, as this allows you to focus more your efforts on your product and less on
which tool to use.
Mocha
Arguably the most used library, Mocha is a flexible library providing developers with just
the base test structure. Functionality for assertions, spies, mocks, and the like are then
added via other libraries/plugins.
If you want a flexible configuration, including the libraries that you particularly
need, then the additional set up and configuration required for Mocha is something you
definitely need to check out
Unfortunately the above point does have a downside, which is having to include
additional libraries for assertions. This does mean that itʼs a little harder, if not longer, to
set up than others. That said, setting up is generally a one-time deal, but I do like being
able to go a “single source truth” (documentation) instead of jumping around the show
Mocha includes the test structure as globals, saving you time by not having
to include or require it in every file. The downside is that plugins just might require
you to include these anyway, leading to inconsistencies, and if you are OCD like me it will
eventually drive you mad!
My thoughts on Mocha
The extensibility and sheer number of different ways you can configure Mocha
impresses me. Having to learn Mocha, then also having to learn the assertion library you
choose does scare me a little though. Flexibility in itʼs assertions, spies and mocks is
highly beneficial. Overall, Mocha covers the basics, and allows developers to extend it
with other frameworks.
Jest
https://raygun.com/blog/javascript-unit-testing-frameworks/ 4/6
24/08/2019 JavaScript unit testing frameworks: Comparing Jasmine, Mocha, AVA, Tape and Jest [2018] · Raygun Blog
If you require a broad API along with specific (perhaps unique) features then
Mocha would be your choice as the extensibility is there
AVA or Tape gives you the minimum requirements. Great for providing a solid
minimal foundation for you to get going fast
If you have a large project, or would like to quickly get started without much
configuration, then Jest would be a solid choice
I hope this helps you in choosing your JavaScript unit testing frameworks in the future. If
youʼd like me to take a look at any other JavaScript unit testing frameworks, let me know
in the comments! Iʼll add them to the list later.
https://raygun.com/blog/javascript-unit-testing-frameworks/ 6/6