В Jasmine equality matchers используются для сравнения значений в тестах и проверки их соответствия ожиданиям. Это фундаментальный инструмент для написания надежных тестов, позволяющий определить, равно ли фактическое значение ожидаемому, а также уточнить условия сравнения.
toBetoBe проверяет строгое равенство
(===). Используется для примитивных типов данных или для
проверки ссылочной идентичности объектов.
describe('Примеры использования toBe', () => {
it('числа', () => {
expect(5).toBe(5); // вернет true
});
it('строки', () => {
expect('hello').toBe('hello'); // вернет true
});
it('объекты', () => {
const obj = {a: 1};
expect(obj).toBe(obj); // верно, так как сравниваются ссылки
expect(obj).not.toBe({a: 1}); // неверно, разные ссылки
});
});
Особенность: toBe не подходит для
сравнения структур данных по значению, например объектов или массивов с
одинаковым содержимым, но разными ссылками.
toEqualtoEqual проверяет глубокое равенство
объектов и массивов, сравнивая их свойства и элементы рекурсивно.
describe('Примеры использования toEqual', () => {
it('массивы', () => {
expect([1, 2, 3]).toEqual([1, 2, 3]); // верно
});
it('объекты', () => {
expect({a: 1, b: 2}).toEqual({a: 1, b: 2}); // верно
});
});
Ключевой момент: toEqual игнорирует
различие ссылок, но требует идентичного содержания всех свойств объекта
и элементов массива.
toBeTruthy и
toBeFalsytoBeTruthy проверяет, является ли значение истинным в
логическом контексте, а toBeFalsy — ложным.
describe('toBeTruthy и toBeFalsy', () => {
it('логическая проверка', () => {
expect(true).toBeTruthy();
expect(1).toBeTruthy();
expect(false).toBeFalsy();
expect(0).toBeFalsy();
expect('').toBeFalsy();
});
});
Эти матчеры удобны для проверки условий без точного значения, где важна только логическая интерпретация.
toBeDefined и
toBeUndefinedtoBeDefined проверяет, что переменная или свойство
существует и не равно undefined, а
toBeUndefined — что значение равно
undefined.
describe('toBeDefined и toBeUndefined', () => {
let value;
it('undefined', () => {
expect(value).toBeUndefined();
});
it('определено', () => {
value = 42;
expect(value).toBeDefined();
});
});
Эти матчеры помогают избежать ошибок при работе с необъявленными или опциональными свойствами объектов.
toBeNulltoBeNull проверяет строгое равенство
null.
describe('toBeNull', () => {
it('проверка на null', () => {
const value = null;
expect(value).toBeNull();
});
});
Важно различать undefined и null, так как
Jasmine различает их при проверках.
toBeNaNtoBeNaN проверяет, является ли значение
NaN. Используется для проверки некорректных
математических операций.
describe('toBeNaN', () => {
it('NaN', () => {
const value = 0 / 0;
expect(value).toBeNaN();
});
});
toContaintoContain проверяет, содержит ли массив или строка
указанное значение.
describe('toContain', () => {
it('массив', () => {
expect([1, 2, 3]).toContain(2);
});
it('строка', () => {
expect('hello world').toContain('world');
});
});
Особенность: сравнение выполняется по значению элементов массива или символов строки, без учета ссылок для объектов.
toMatchtoMatch используется для проверки соответствия строки
регулярному выражению.
describe('toMatch', () => {
it('регулярное выражение', () => {
expect('hello123').toMatch(/\d+/);
expect('abc').toMatch(/abc/);
});
});
notВсе equality matchers поддерживают отрицание через
not. Это позволяет проверять, что значение не
соответствует ожиданиям.
describe('Использование not', () => {
it('не равно', () => {
expect(5).not.toBe(3);
expect({a:1}).not.toBe({a:1}); // разные ссылки
expect([1,2]).not.toEqual([2,1]); // порядок элементов имеет значение
});
});
number, string,
boolean) лучше использовать toBe.object,
array) применять toEqual.if, while) удобно
тестировать через toBeTruthy и toBeFalsy.toBeUndefined, toBeNull,
toBeDefined.toContain
и toMatch.toEqual для массивов. [1,2] и
[2,1] — не равны.toBe проверяет
идентичность ссылок, toEqual — содержимое.0, null,
undefined, '', NaN,
false — все считаются ложными в
toBeFalsy.not позволяет
расширять тестовые сценарии без создания новых матчеров.Эти matcher’ы составляют ядро проверки значений в Jasmine и позволяют строить детальные, точные и надежные тесты для JavaScript-кода.