Jest предоставляет разнообразие матчеров для тестирования коллекций данных, таких как массивы, объекты и другие итерируемые структуры. Эти матчеры позволяют эффективно проверять содержимое и структуру данных без необходимости написания сложных циклов. Разбор этих матчеров необходим для правильного использования Jest при тестировании функциональности, связанной с массивами и объектами.
Для работы с массивами Jest предоставляет несколько полезных матчеров. Они позволяют проверять содержимое массива, порядок элементов и даже его длину.
Для проверки длины массива можно использовать матчеры
.toHaveLength(). Этот матчёр проверяет, соответствует ли
длина массива ожидаемой.
test('массовая проверка длины', () => {
const array = [1, 2, 3];
expect(array).toHaveLength(3);
});
Этот матчёр полезен, когда нужно подтвердить, что в массиве содержится точно определённое количество элементов. Ошибка будет выведена, если длина массива не совпадает с ожидаемой.
Сравнение элементов массива можно выполнять с помощью матчера
.toEqual(). Этот матчёр сравнивает массивы по значению, то
есть проверяет, что элементы массива и их порядок совпадают.
test('массовая проверка содержимого', () => {
const array = [1, 2, 3];
expect(array).toEqual([1, 2, 3]);
});
Если порядок элементов в массиве или сами элементы будут различаться, тест не пройдёт.
Для проверки того, что массив содержит определённые элементы, можно
использовать матчеры .toContain(). Этот матчёр проверяет,
что массив содержит указанный элемент, при этом не важно, где именно он
находится.
test('массовая проверка на содержание элемента', () => {
const array = [1, 2, 3, 4];
expect(array).toContain(3);
});
Если элемент не найден в массиве, тест не пройдёт.
Для проверки того, что массив содержит в себе определённое
подмножество, можно использовать матчеры
.toEqual(expect.arrayContaining([...])). Этот метод удобен
для проверки наличия конкретных элементов в массиве, не заботясь о том,
что в массиве есть ещё дополнительные элементы.
test('массовая проверка на подмножество', () => {
const array = [1, 2, 3, 4, 5];
expect(array).toEqual(expect.arrayContaining([2, 4]));
});
Этот тест проверяет, что в массиве есть элементы 2 и
4, но игнорирует другие элементы.
Для проверки того, что массив содержит все элементы из другого
массива, можно использовать .toContainEqual().
test('проверка на наличие всех элементов', () => {
const array = [{ id: 1 }, { id: 2 }];
expect(array).toContainEqual({ id: 1 });
});
Этот метод проверяет, что массив содержит объект, сравнивая его по значению.
Помимо массивов, Jest также поддерживает тестирование других итерируемых объектов, таких как Set и Map.
Для проверки, что Set содержит определённый элемент, используется
матчёр .toContain(). Этот матчёр работает аналогично тому,
как это делается для массивов.
test('проверка на наличие элемента в Set', () => {
const mySet = new Set([1, 2, 3]);
expect(mySet).toContain(2);
});
В случае, если элемент не найден, тест завершится с ошибкой.
Для проверки того, что Map содержит определённый ключ, можно
использовать матчёр .toHaveProperty(). В отличие от обычных
объектов, для работы с Map используется специфичный синтаксис.
test('проверка на наличие ключа в Map', () => {
const myMap = new Map();
myMap.set('key', 'value');
expect(myMap).toHaveProperty('key');
});
Этот матчёр подтверждает, что Map содержит ключ key.
Чтобы проверить значение в Map, также можно использовать
.toHaveProperty(), но дополнительно нужно указать ожидаемое
значение.
test('проверка на значение в Map', () => {
const myMap = new Map();
myMap.set('key', 'value');
expect(myMap).toHaveProperty('key', 'value');
});
Здесь проверяется, что по ключу key находится значение
value.
Jest позволяет работать с асинхронными коллекциями данных, такими как
асинхронные итераторы и асинхронные генераторы. При работе с такими
структурами можно использовать матчер .resolves в
комбинации с другими матчерами.
test('асинхронная проверка на наличие элемента', async () => {
const asyncArray = Promise.resolve([1, 2, 3]);
await expect(asyncArray).resolves.toContain(2);
});
Здесь происходит асинхронная проверка, и тест подтвердит, что в
массиве присутствует элемент 2.
.toEqual() и
.toContain() учитывают порядок элементов. Если требуется
игнорировать порядок, можно использовать методы, такие как
expect.arrayContaining()..toEqual(), так
как этот матчёр сравнивает объекты по значению..resolves, чтобы правильно
обрабатывать промисы.Таким образом, матчера для работы с массивами и итерируемыми объектами предоставляют мощный инструмент для удобной и эффективной проверки коллекций в тестах, что позволяет легко работать как с синхронными, так и с асинхронными данными.