unitarios unit tutorial test español javascript unit-testing callback mocha mocha-phantomjs

javascript - unit - mocha vs jest



caso de prueba mocha-phantomjs para la función de devolución de llamada (1)

Tengo un módulo en el que tengo esta función

flickrPhotoSearch: function (searchByName, flickrUserKey, numberOfImages, callbackData) { return $.ajax({ url: commonConstants.BASE_URL + "flickr.photos.search&api_key=" + flickrUserKey + "&tags=" + searchByName + "&format=json&jsoncallback=?", dataType: ''json'', async: true, success: function (jsonData) { if (jsonData.stat === commonConstants.JSON_SUCCESS) { if (jsonData.photos[''photo''].length < commonConstants.DATA_LENGTH) { callbackData(jsonData); } else { var flickrImage = flickrApplication.jsonToImage(jsonData, numberOfImages); callbackData(flickrImage); } } else { callbackData(jsonData); } } }); }

Quiero probar esta función y elijo mocha-phantomjs para ello. Y este es mi caso de prueba

describe("flickrphotoSearch", function () { it("should fail with wrong key", function () { flickrApplication.flickrPhotoSearch(testConstant.CORRECT_NAME, testConstant.WRONG_KEY, testConstant.CONSTANT_ONE, handleData); function handleData (photoUrl) { assert.equals(photourl.stat, "pass", photoUrl.message); } }); });

Ahora esta prueba debería fallar al dar el error "Invalid API Key" . Pero pasó. Creo que esto se debe a que utilicé assertion dentro de la función de devolución de llamada, es decir, handleData() .

Estoy usando la configuración de mocha-phantomjs y la biblioteca de afirmación de chai .

Busqué tutoriales y demos, pero no encontré ninguno. También mocha-phantomjs ejemplos de mocha-phantomjs pero sin ayuda publicaré aquí.

Por favor dígame cómo probar la función de devolución de llamada en mocha-phantomjs .


Lo que usted describe es el síntoma típico de una prueba que es asincrónica pero que se está probando de forma síncrona . La solución es usar la devolución de llamada done en su prueba:

it("should fail with wrong key", function (done) { flickrApplication.flickrPhotoSearch(testConstant.CORRECT_NAME, testConstant.WRONG_KEY, testConstant.CONSTANT_ONE, handleData); function handleData (photoUrl) { assert.equals(photourl.stat, "pass", photoUrl.message); done(); } });

Cuando agrega el argumento done a la devolución de llamada que le otorga, le dice a Mocha que la prueba es asíncrona y luego debe llamarlo en su devolución de llamada asincrónica ( handleData aquí) para decirle a Mocha que la prueba ha finalizado.

De lo contrario, Mocha ejecutará la devolución de llamada y no esperará a que handleData ejecute. La prueba terminará de inmediato, sin errores, por lo que Mocha dirá que ya pasó.