Кратко о Jasmine.
2017 год
Jasmine(англ.) - это фреймворк для тестирования JS-кода с уклоном в BDD (Behaviour-Driven Development). Идея BDD в том, что мы до разработки описываются требования (спецификация) к коду в виде тестов. Запускать тесты можно через Visual Studio и через браузер. Отладка тестов допустима только в браузере (средствами браузера).
Словарь методов Jasmine
Describe
- 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 – Возвращаемое значение.