Разработчику > Соглашение по оформлению кода на javascript > Кратко о Jasmine.

Кратко о Jasmine.

Jasmine(англ.) - это фреймворк для тестирования JS-кода с уклоном в BDD (Behaviour-Driven Development). Идея BDD в том, что мы до разработки описываются требования (спецификация) к коду в виде тестов. Запускать тесты можно через Visual Studio и через браузер. Отладка тестов допустима только в браузере (средствами браузера).

Словарь методов Jasmine

De​scribe

describe (description, specDefinitions)
определение набора тестов, где:
  • description – Текстовое описание группы тестов;
  • specDefinitions – Функция, описывающая блок тестов.

Для включения и отключения блока тестов для компилятора используются функции:

xdescribe (description, specDefinitions)
отключенное описание блока тестов (блок не будет запущен при выполнении тестов);
fdescribe (description, specDefinitions)
фокусировка на данном блоке тестов (все остальные блоки тестов будут пропущены).

Внутрь одного блока describe можно вкладывать другие блоки describe.

It

it (description[, testFunction, timeout])
определение теста, где:
  • description – Текстовое описание теста;
  • testFunction – Функция, описывающая тест;
  • timeout –Таймаут (Int) для асинхронных тестов (по умолчанию используется значение jasmine.DEFAULT_TIMEOUT_INTERVAL.

Для включения и отключения теста для компилятора используются функции:

xit (description[, testFunction, timeout])
отключенное описание теста (тест не будет запущен при запуске);
fit (description[, testFunction, timeout])
фокусировка на тест (остальные тесты будут пропущены при запуске).

afterAll, afterEach, beforeAll, beforeEach

beforeAll ([function, timeout])
Процедура, выполняемая до всех тестов в текущем описании набора describe;
beforeEach ([function, timeout])
Процедура, выполняемая до каждого теста в текущем наборе;
afterEach ([function, timeout])
Процедура, выполняемая после каждого теста в текущем наборе;
afterAll ([function, timeout])
Процедура, выполняемая после всех тестов в текущем описании набора describe, где:
  • function – Функция;
  • timeout – Таймаут (Int).

expect

expect (actual).{matchers}
Функция проверки соответствия актуальных значений ожидаемым, где:
  • actual – Проверяемое значение, свойство, выражение или объект;
  • matchers – Определение метода проверки..
Описание типов matchers:
toBe(expected) - Проверка на равенство объектов/значений
expect(1 + 2).toBe(3);
expect(1 + 2).not.toBe(5);
toEqual(expected) - Сравнение объектов по содержимому.
a = {x: 8, y: 9};
b = {x: 8, y: 9};
expect(a).toEqual(b);
expect(a).not.toBe(b);
toBeDefined() - Значение определено
expect(window.document).toBeDefined();
toBeUndefined() - Значение не определено
expect(window.notExists).toBeUndefined();
toBeNull() - Значение равно null
a = null;
expect(a).toBeNull();
toBeTruthy() - Значение/выражение верно (true)
expect(5 > 0).toBeTruthy();
toBeFalsy() - Значение/выражение не верно (false)
expect(5 < 0).toBeFalsy();
toBeLessThan(expected) - Значение меньше expected
expect(1 + 2).toBeLessThan(5);
toBeLessThanOrEqual(expected) - Значение меньше или равно expected
expect(3 + 2).toBeLessThanOrEqual(5);
toBeGreaterThan(expected) - Значение больше expected
expect(1 + 2).toBeGreaterThan(0);
toBeGreaterThanOrEqual(expected) - Значение больше или равно expected
expect(1 + 2).toBeGreaterThanOrEqual(3);
toBeCloseTo(expected[, precision]) - Значение близко к числу expected; precision – точность
expect(1.2345).toBeCloseTo(1.2, 1);
toBeNaN() - Значение равно NaN
expect(sqrt(-9)).toBeNaN();
toMatch(expected) - Значение соответствует регулярному выражению expected
expect("some string").toMatch(/string/);
toContain(expected) - Значение содержит expected (элемент массива, часть строки)
expect([1, 2, 3]).toContain(2);
expect("some string").toContain("some");
toBeNegativeInfinity() - Значение равно отрицательной бесконечности
expect(-1/0).toBeNegativeInfinity();
toBePositiveInfinity() - Значение равно положительной бесконечности
expect(1/0).toBePositiveInfinity();
toHaveBeenCalled() - Проверяется был ли осуществлен вызов функции
person = new Person("Jim", 25) ;
spyOn(person, 'getName');
person.getName();
expect(person.getName).toHaveBeenCalled();
toHaveBeenCalledWith() - Проверяется наличие аргументов вызова функции
person = new Person("Jim", 25) ;
spyOn(person, 'setName');
person.setName("Ira");
expect(person.setName).toHaveBeenCalledWith("Ira")
toHaveBeenCalledBefore(expected) - Проверяется, была ли функция вызвана перед функцией expected
person = new Person("Jim", 25) ;
setNameSpy = jasmine.createSpy('setName');
setAgeSpy = jasmine.createSpy('setAge');
person.setName("Ira");
person.setAge(18);
expect(setNameSpy).toHaveBeenCalledBefore(setAgeSpy);
toHaveBeenCalledTimes(expected) - Проверяется количество вызовов функции
person = new Person("Jim", 25) ;
spyOn(person, 'setAge');
person.setAge (25);
person.setAge (person.Age + 1);
expect(person.setName).toHaveBeenCalledTimes(2)
toThrow([expected]) - Вызвано исключение, где expected – тип вызванного исключения
var func = function(){
    return window.notExists.value
};
expect(func).toThrow()
toThrowError([expected, message]) - Вызвано исключение, где: expected – тип вызванного исключения, message – сообщение об ошибке / регулярное выражение
var foo = function() {
    throw new TypeError("foo bar baz");
};
expect(foo).toThrowError("foo bar baz");
expect(foo).toThrowError(/bar/);
expect(foo).toThrowError(TypeError);
expect(foo).toThrowError(TypeError, "foo bar baz");
fail ([error])
Процедура, явно переводящая текущий тест в ошибочный, где:
  • error – Строковое сообщение об ошибке или исключение.
pending ([message])
Процедура, переводящая тест в ожидающий, что приведет к игнорированию данного теста при запуске, где:
  • message – Причина, по которой спецификация находится в ожидании.
spyOn (obj, methodName) → {Spy}
Функция слежения за объектом и его методами, где:
  • obj – Объект, за которым производится слежение;
  • methodName – Название метода для замены его шпионом слежение;
  • Spy – Возвращаемое значение.
spyOnProperty (obj, propertyName[, accessType]) → {Spy}
Перехват-слежение за свойством объекта, где:
  • obj – Объект, за кооторым ведется наблюдение;
  • propertyName – Имя свойства, которое нужно заменить на Spy;
  • accessType – Тип доступа (get | set) для свойства Spy;
  • Spy – Возвращаемое значение.