javascript - Jasmine probando.load() para obtener la URL llamada
jasmine2.0 (1)
Tengo una función que carga una plantilla y quiero verificar que se está llamando a la URL correcta.
Como no puedo encontrar ninguna información más que para espiar las llamadas ajax, supongo que es lo mismo para las llamadas .load()
. Estoy usando Jasmine 2.4.1
Función
function templateLoader() {
var templateURL = ''/path/to/template.html'';
$(''#myElement'').load(templateURL, function(response, status, xhr) {
if (status === "error") {
common.templateError(templateURL, xhr);
} else {
ns.successFunction();
}
});
}
Prueba de jazmín
var templateURL = ''/path/to/template.html'';
spyOn($(''#myElement''), "load");
templateLoader(); // call the function
expect($(''#myElement'').load.calls.mostRecent().args[0]["url"]).toEqual(templateURL);
Cuando ejecuto esta prueba, aparece el siguiente error:
TypeError: no se puede leer la propiedad ''mostRecent'' de undefined
¿Hay alguna manera diferente de hacer esto? También quiero verificar que se está llamando a la función de éxito, pero hasta que pueda verificar que la URL es correcta, no puedo hacer eso.
Pocas observaciones:
- Su carga es una función Ajax, por lo que tendría que
spyOn
$.ajax
lugar de$(#myElement).load
- No se puede verificar tanto la URL de la llamada como el successCallBack al mismo tiempo sin burlarse de la función ajax. Esto se debe a que su successCallback se ejecuta solo después de obtener una respuesta del servidor, mientras tanto se ejecuta la prueba.
- Por lo tanto, el truco es burlarse de la llamada ajax en sí misma y llamar a una función falsa para resolver la promesa, que en realidad resuelve el valor de éxito en el tiempo de ejecución, es decir, sincrónicamente, lo que ayuda a sus expectativas.
Nota: utilicé el jazmín 2.5
El siguiente código ilustra todos los puntos mencionados anteriormente. Para verlo en acción, acércate al violín aquí
function templateLoader(templateURL) {
$(''#myElement'').load(templateURL, null, function(response, status, xhr) {
if (status === "error") {
common.templateError(templateURL, xhr);
} else {
successFunction();
}
});
}
successFunction = function() {
console.log("This is a success Function");
}
describe("spec to test ajax url", function() {
it(''test load call url'', function() {
spyOn($, ''ajax'').and.callThrough();
spyOn(window, ''successFunction'').and.callThrough();
templateLoader("https://jsonplaceholder.typicode.com/posts/1");
expect($.ajax.calls.mostRecent().args[0]["url"]).toEqual("https://jsonplaceholder.typicode.com/posts/1");
});
it(''test success function'', function(){
spyOn(window, ''successFunction'').and.callThrough();
spyOn($, ''ajax'').and.callFake(function(e) {
return new $.Deferred().resolve({}).promise();
});
templateLoader("https://jsonplaceholder.typicode.com/posts/1");
expect($.ajax.calls.mostRecent().args[0]["url"]).toEqual("https://jsonplaceholder.typicode.com/posts/1");
expect(window.successFunction).toHaveBeenCalled();
});
});