Skip to content

Instantly share code, notes, and snippets.

@monolithed
Last active January 30, 2021 18:54
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save monolithed/db66a93546bae80800d1 to your computer and use it in GitHub Desktop.
Save monolithed/db66a93546bae80800d1 to your computer and use it in GitHub Desktop.
Mocha vs. Jasmine

Почему 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

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

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

@Kuznetsov-Ilia
Copy link

Богато, но в контексте скорости прохождения тестов (распаралеливания), я бы взглянул на https://github.com/sindresorhus/ava

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