javascript - ¿Hay alguna manera de usar toHaveBeenCalledWith de jest para verificar la longitud del arreglo de argumentos?
La función se llamaría con:
{ items: [1, 2, 3]}expect(mockedFunction).toHaveBeenCalledWith(
expect.objectContaining({
items: expect.toBeLengthOf(3) // Pseudocode, this function does not exist here
}),
);
Respuesta #1
El objeto .mock en la función simulada tiene una lista .calls en él. Así que
expect(
mockedFunction.mock.calls[mockedFunction.mock.calls.length - 1][0].items
).toHaveLength(3);
validará la longitud de la propiedad items en el primer argumento (numeración basada en 0) por última vez (mockedFunction.mock.calls.length - 1) que ha sido llamado.
También puedes considerar usar expect.anything() como un marcador de posición:
expect(mockedFunction).toHaveBeenLastCalledWith(
expect.objectContaining({
items: [expect.anything(), expect.anything(), expect.anything()]
})
)
Pero puede ser mejor usar un simulacro y devolver los mismos valores de manera consistente, esto te permitirá validar el contenido del arreglo en lugar de solo su longitud
Respuesta #2
Podrías anidar expect.objectContaining y verificar la propiedad length del arreglo:
expect(mockedFunction).toHaveBeenCalledWith(
expect.objectContaining({
items: expect.objectContaining({ length: 3})
}),
);
