Какие методы работы с массивами данных вы используете при тестировании?

«Какие методы работы с массивами данных вы используете при тестировании?» — вопрос из категории JavaScript, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При тестировании на JavaScript (например, в автотестах на Cypress/Playwright или unit-тестах на Jest) часто приходится проверять и обрабатывать массивы с данными. Вот ключевые методы:

1. Методы для проверок (Assertions):

  • array.includes(element) / array.indexOf(element) > -1 – проверить наличие элемента.
  • array.length – проверить размер массива.
  • array.every(predicate) – убедиться, что все элементы удовлетворяют условию.
  • array.some(predicate) – убедиться, что хотя бы один элемент удовлетворяет условию.

2. Методы для фильтрации и поиска тестовых данных:

  • array.filter(predicate) – отфильтровать массив по условию (например, найти все незавершенные задачи).
  • array.find(predicate) – найти первый элемент, удовлетворяющий условию.
  • array.findIndex(predicate) – найти индекс первого подходящего элемента.

3. Методы для трансформации данных перед проверкой:

  • array.map(transformFn) – преобразовать массив (например, извлечь только ID или заголовки).
  • array.slice(start, end) – взять срез массива для проверки пагинации.
  • array.sort(compareFn) – отсортировать для стабильного сравнения.

4. Методы для агрегации и сводок:

  • array.reduce(reducerFn, initialValue) – вычислить сумму, среднее и другие агрегаты для проверки статистики.

Практический пример в тесте (Cypress/Jest):

// Проверка, что в таблице отображаются только активные пользователи
cy.get('[data-testid="user-row"]').should(($rows) => {
    // 1. Извлекаем данные из DOM в массив статусов
    const statuses = $rows.map((i, el) => Cypress.$(el).attr('data-status')).get();

    // 2. Проверяем, что ВСЕ статусы равны 'active'
    expect(statuses).to.have.length.greaterThan(0);
    const allActive = statuses.every(status => status === 'active');
    expect(allActive).to.be.true;

    // Альтернативная проверка через every
    expect(statuses).to.satisfy((arr) => arr.every(s => s === 'active'));
});

// Unit-тест: проверка фильтрации
import { filterActiveUsers } from './userUtils';

test('filterActiveUsers returns only users with isActive: true', () => {
    const testUsers = [
        { id: 1, name: 'Alice', isActive: true },
        { id: 2, name: 'Bob', isActive: false },
        { id: 3, name: 'Charlie', isActive: true }
    ];
    const result = filterActiveUsers(testUsers);
    expect(result).toHaveLength(2);
    expect(result.every(user => user.isActive)).toBeTruthy();
    expect(result.map(u => u.id)).toEqual([1, 3]); // Проверяем конкретные ID
});

Видео-ответы