javascript jasmine jasmine2.0

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(); }); });