Ожидайте, что аргумент массива будет иметь заданную длину

#jestjs

#jestjs

Вопрос:

Я немного новичок в Jest, поэтому, пожалуйста, простите меня, если это очевидный ответ, но я не могу найти ответ после прокрутки документов.

У меня есть функция (funcA), которая передает массив разной длины другой функции (funcB), зависящей от funcA получаемых аргументов. Я пытаюсь проверить правильность длины массива, который передается funcB , на основе аргументов, которые я даю funcA . Меня не беспокоит содержимое массива, просто он имеет определенную длину. Это моя текущая попытка:

 // Modules
const funcA = require('./funcA')

// Mock
const funcB = jest.fn(pairs => {
    return pairs[0]
})

// Test
test('Should pass array of 3623 length', () => {
    const result = funcA(75)
    
    expect(result).toBeInstanceOf(Object)
    expect(funcB).toHaveBeenCalledWith(expect.any(Array).toHaveLength(3623))
})
  

Я хотел попробовать использовать any() , если смогу, но следующий тест приводит к ошибке:

Ошибка типа: expect.any(…).toHaveLength не является функцией

Я получаю ту же ошибку, даже если я заключаю expect.any(...) в другой набор круглых скобок. Есть ли какой-нибудь способ добиться того, чего я хочу?

Комментарии:

1. Как связаны funcA и funcB? Если funcA вызывает funcB, вы не можете издеваться над ним, просто назначив spy локальной переменной funcB.

Ответ №1:

Тест, который утверждает только длину массива и игнорирует содержимое массива, не имеет большого значения. Чем он конкретнее, тем лучше. Если ожидается конкретный массив, его можно указать как фиксированный.

Это утверждение не может работать, потому toHaveBeenCalledWith что предполагается, что это ожидаемый результат и не может содержать другое утверждение, toHaveLength .

Чтобы утверждать toHaveBeenCalledWith с помощью массива с любыми элементами, он должен быть:

 expect(funcB).toBeCalledWith(Array(3623).fill(expect.anything()))
  

Другой вариант — утверждать аргумент напрямую:

 expect(funcB).toBeCalledWith(expect.any(Array))
expect(funcB.mock.calls[0][0]).toHaveLength(3623))
  

Комментарии:

1. Спасибо, это именно то, что я искал! Я также проверяю, что структура всех элементов в массиве является объектом и имеет правильные свойства