In order to get a more flexible functionality, it’s common to use a combination of tools even if one can achieve relatively the same.
Provide a testing structure (Mocha, Jasmine, Jest, Cucumber) Provide assertions functions (Chai, Jasmine, Jest, Unexpected) Generate, display, and watch test results (Mocha, Jasmine, Jest, Karma) Generate and compare snapshots of component and data structures to make sure changes from previous runs are intended (Jest, Ava) Provide mocks, spies, and stubs (Sinon, Jasmine, enzyme, Jest, testdouble) Generate code coverage reports (Istanbul, Jest, Blanket) Provide a browser or browser-like environment with a control on their scenarios execution (Protractor, Nightwatch, Phantom, Casper)