В Jasmine тестирование массивов и других итерируемых объектов осуществляется с помощью специализированных матчеров, которые позволяют проверять содержание, порядок элементов и соответствие определённым условиям. Эти инструменты необходимы для точного контроля над коллекциями данных в приложениях JavaScript.
toContainНазначение: проверка наличия конкретного элемента в массиве или другой коллекции.
describe('toContain matcher', () => {
it('проверяет наличие элемента в массиве', () => {
const fruits = ['apple', 'banana', 'orange'];
expect(fruits).toContain('banana');
});
});
Особенности:
===).toEqual с
массивами и объектамиtoEqual используется для глубокого сравнения структур,
включая массивы и объекты.
describe('toEqual matcher', () => {
it('сравнивает массивы по значению', () => {
const numbers = [1, 2, 3];
expect(numbers).toEqual([1, 2, 3]);
});
});
Ключевые моменты:
toBe, который проверяет только ссылку на
объект.toHaveSize /
toHaveLengthДля проверки длины массива или строки применяется
toHaveSize или toHaveLength.
describe('toHaveSize matcher', () => {
it('проверяет количество элементов в массиве', () => {
const letters = ['a', 'b', 'c'];
expect(letters.length).toBe(3);
});
});
Особенности:
expect(array.length).toBe(n) также
распространено, но toHaveSize делает код читаемым и
выразительным.arrayContainingПозволяет проверять, содержит ли массив определённый набор элементов, без учёта порядка и других элементов.
describe('arrayContaining matcher', () => {
it('проверяет наличие нескольких элементов', () => {
const numbers = [1, 2, 3, 4, 5];
expect(numbers).toEqual(jasmine.arrayContaining([2, 3]));
});
});
Преимущества:
setEquals /
сравнение с множествомJasmine позволяет создавать кастомные проверки для множеств,
используя комбинации arrayContaining и длину массива.
describe('проверка множеств', () => {
it('сравнивает два массива как множества', () => {
const a = [1, 2, 3];
const b = [3, 1, 2];
expect(a).toEqual(jasmine.arrayContaining(b));
expect(a.length).toBe(b.length);
});
});
Особенности:
toContainEqual
(глубокое сравнение элементов массива)Для массивов объектов используется проверка на наличие элемента по структуре, а не по ссылке.
describe('toContainEqual matcher', () => {
it('проверяет наличие объекта в массиве', () => {
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 }
];
expect(users).toContain(jasmine.objectContaining({ name: 'Alice' }));
});
});
Преимущества:
jasmine.objectContaining для гибких
проверок.forEach и everyВ случаях, когда требуется проверить каждый элемент массива на соответствие условию, можно комбинировать Jasmine с методами массивов.
describe('проверка всех элементов массива', () => {
it('все элементы положительные', () => {
const numbers = [1, 2, 3, 4];
numbers.forEach(num => {
expect(num).toBeGreaterThan(0);
});
});
it('все элементы соответствуют условию', () => {
const numbers = [2, 4, 6];
expect(numbers.every(n => n % 2 === 0)).toBe(true);
});
});
Особенности:
Jasmine поддерживает вложенные и комбинированные проверки для массивов и итерабельных объектов:
describe('комбинированные проверки', () => {
it('массив содержит объект и имеет длину 3', () => {
const items = [
{ id: 1, name: 'A' },
{ id: 2, name: 'B' },
{ id: 3, name: 'C' }
];
expect(items.length).toBe(3);
expect(items).toContain(jasmine.objectContaining({ name: 'B' }));
});
});
Преимущества комбинирования:
Array и iterable matchers в Jasmine предоставляют мощный набор инструментов для детальной проверки коллекций. Их использование обеспечивает строгий контроль за содержимым, структурой и порядком элементов, что критично для надежного тестирования приложений на JavaScript.