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ó.