Skip to content

Instantly share code, notes, and snippets.

@AnthonyPanchenko
Forked from monolithed/mocha_vs_jasmine.md
Created June 21, 2016 09:56
Show Gist options
  • Select an option

  • Save AnthonyPanchenko/26c9803baf928398ac9214dce3b81bbd to your computer and use it in GitHub Desktop.

Select an option

Save AnthonyPanchenko/26c9803baf928398ac9214dce3b81bbd to your computer and use it in GitHub Desktop.
Mocha vs. Jasmine

Почему Mocha, а не Jasmine?

Ниже будут приведены аргументы в пользу выбора Mocha

  • Высокая популярность:
    — 2m против 400 k загузок в месяц

  • Высокая активность:
    — 1 890 против 1400 коммитов (всего)
    — 171 против 101 коммитов (последний год)
    — 1228 против 698 тасков
    — 835 против 329 пул-реквестов
    — 251 против 115 контрибьютеров

  • Документацию Jasmine требуется изучать по исходным кодам?!

  • Минимальное количество глобальных переменных

    Mocha

    describe, it, before, beforeEach, after, afterEach

    Jasmine

    context, describe, fdescribe, xdescribe, xit, fit, it, jasmine, expect, not, before, beforeEach, after, afterEach, afterAll, beforeAll, spyOn, waitsFor, runs

  • Несогласованный синтаксис включений/исключений тестов

    Mocha

     describe.only('All nested suites will still be executed', function () {
         // ...
     });
    
     it.only('Execute a particular test case', function () {
     	    // ...
     });

    Jasmine

     fdescribe('All nested suites will still be executed', function () {
         // ...
     });
    
     fit('Execute a particular test case', function () {
         // ...
     });

    В документации еще есть упоминания про xdescribe и xit

  • У Jasmine раздутый, но в тоже время ограниченный набор ассертов

    Jasmine

     expect(1).toBeGreaterThan(10)

    Mocha + Chai

     1.above(10);

    На самом деле, Jasmine тоже можно заставить работать с Chai, но это будет оверхед.

    Вопреки расхожему мнению, Mocha проигрывает Jasmine из-за отсутствия встроенных ассертов, однако это не совсем так. В Node есть стандартный модуль assert, который более чем полностью удовлетворяет базовые потребности:

     var assert = require('assert');
    
     it('Execute a particular test case', function () {
     	assert.equal(0, 1);
     });
  • Использование Chai дает шикарные возможности для интеграционного тестирования:

    Mocha + WebdriverIO + Chai

     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)!

  • Стоит поверить а слово

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment