Estoy intentando crear pruebas unitarias para una función que ya está escrita porque necesito agregarle un código nuevo. Esta función utiliza una variable de ámbito global, desArray , que se define varios cientos de líneas hacia arriba, cerca de la parte superior del archivo.
var desArray = []; Luego, esta variable se completa con una llamada ajax dentro de la función $(document).ready() .
$(document).ready(function() { [...] $.ajax({ [...] success: function (response) { response.data.forEach(item => { desArray.push(item); }); [...] } }); [...] }); Obviamente, dado que estoy tratando de escribir pruebas unitarias, solo quiero "reemplazar" o, supongo, "simular" la variable desArray dentro de la prueba. De lo contrario, se convierte en una prueba de integración porque está llegando a las llamadas API y demás.
He encontrado mucha información sobre cómo simular funciones con Jest, pero casi nada sobre cómo simular una variable simple con Jest. Lo único que he encontrado es intentar anularlo en la prueba:
global.desArray = [...]; Esto, lamentablemente, no funciona. La variable desArray sigue siendo una matriz vacía en la función que estoy probando.
¿Algunas ideas?
EDITAR: Como referencia, aquí está la función específica que quiero probar con mi prueba unitaria:
/** * Populates the Weight Type dropdown * and pre-selects an option from its list based on criteria. * * @param {jQuery} selectElement The jQuery-wrapped Select element * @param {string[]} deliveredWeight Weight field from tender broken into an array * @param {string} weightTypeQualifier Code to identify the type of weight */ const preSelectWeightType = (selectElement, deliveredWeight, weightTypeQualifier) => { for (let c = 0; c < desArray.length; c++) { const thisOption = $(new Option(desArray[c].description, desArray[c].id)); selectElement.append(thisOption); if (desArray.length === 1) { thisOption.attr("selected", true); } if (desArray[c].description === deliveredWeight[1]) { thisOption.attr("selected", true); } if (weightTypeQualifier === desArray[c].qualifier) { thisOption.attr("selected", true); } } };