### Почему Mocha, а не Jasmine? Ниже будут приведены аргументы в пользу выбора `Mocha` * Высокая популярность:
— 4m против 400k загузок в месяц * Высокая активность:
— 1 890 против 1400 коммитов (всего)
— 171 против 101 коммитов (последний год)
— 1228 против 698 тасков
— 835 против 329 пул-реквестов
— 251 против 115 контрибьютеров * Документацию `Jasmine` требуется изучать по исходным кодам?! * Минимальное количество глобальных переменных *Mocha* `describe`, `xdescribe`, `it`, `xit`, `before`, `beforeEach`, `after`, `afterEach` *Jasmine* `context`, `describe`, `fdescribe`, `xdescribe`, `xit`, `fit`, `it`, `jasmine`, `expect`, `not`, `before`, `beforeEach`, `after`, `afterEach`, `afterAll`, `beforeAll`, `spyOn`, ~~`waitsFor`~~, ~~`runs`~~ * У `Jasmine` раздутый, но в тоже время ограниченный набор ассертов *Jasmine* ```js expect(1).toBeGreaterThan(10) ``` *Mocha + Chai* ```js 1.above(10); ``` На самом деле, *Jasmine* тоже можно [заставить](https://www.npmjs.com/package/chai-jasmine) работать с *Chai*, но это будет оверхед. Вопреки расхожему мнению, `Mocha` проигрывает `Jasmine` из-за отсутствия встроенных ассертов, однако это не совсем так. В `Node` есть стандартный модуль [`assert`](https://nodejs.org/api/assert.html), который более чем полностью удовлетворяет базовые потребности: ```js var assert = require('assert'); it('Execute a particular test case', function () { assert.equal(0, 1); }); ``` * Использование `Chai` может быть оправдано когда интерфейс построен на промисах: *Mocha + WebdriverIO + Chai* ```js it('Проверка портальной авторизации', function *() { yield browser .open('/user/login') .wait(() => { return browser.execute(() => { return window.__PH && window.__PH.activeUser(); }) .then(result => result.value); }) .expect.eventually.equal(object.user.email) }); ``` *Jasmine + WebdriverIO* ```js it('Проверка портальной авторизации', function () { browser .open('/user/login') .wait(() => { return browser.execute(() => { return window.__PH && window.__PH.activeUser(); }) .then(result => result.value); }) .then(function (result) { expect(result).toBeEqual(object.user.email); }) ; }); ``` * `Mocha` поддерживает `Growl`-нотификацию * `Mocha` производит временные замеры каждого теста и подсвечивает наиболее медленные * `Mocha` имеет собственный вотчер файлов * `Mocha` дает прекрасные возможности для отладки кода — дебаггер, профайлер и трейсер вызова функций * `Mocha` дает возможность прокинуть глобальные переменные * `Mocha` дает возможность конфигурировать время выполнения каждого теста * `Mocha` поддерживает три вида стандартных интерфейсов — `bdd`, `tdd` и `exports` (`Jasmine` реализует только `bdd`-интерфейс) * `Mocha` прекрасно интегрируется со сторонними библиотеками типа `Sinon` и `Chai` (без оверхеда как в `Jasmine`) * `Mocha` показывает диффы! * `Mocha` позволяет перезапускать зафейленные тесты! * `Mocha` может запускать выборчно тесты (--grep) * `Mocha` имеет несколько репортеров (и куча сторонних, в т.ч. [QUnit](http://npmjs.com/package/mocha-qunit-ui))! * Стоит [поверить а слово](https://github.com/yeoman/yeoman/issues/117)