Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

195
Visualizações
¿Cómo verifico los eventos jQuery AJAX con Jasmine?

Estoy tratando de usar Jasmine para escribir algunas especificaciones BDD para solicitudes básicas de jQuery AJAX. Actualmente estoy usando Jasmine en modo independiente (es decir, a través SpecRunner.html ). Configuré SpecRunner para cargar jquery y otros archivos .js. ¿Alguna idea de por qué lo siguiente no funciona? has_returned no se hace realidad, aunque el "yuppi!" alerta aparece bien.

 describe("A jQuery ajax request should be able to fetch...", function() { it("an XML file from the filesystem", function() { $.ajax_get_xml_request = { has_returned : false }; // initiating the AJAX request $.ajax({ type: "GET", url: "addressbook_files/addressbookxml.xml", dataType: "xml", success: function(xml) { alert("yuppi!"); $.ajax_get_xml_request.has_returned = true; } }); // waiting for has_returned to become true (timeout: 3s) waitsFor(function() { $.ajax_get_xml_request.has_returned; }, "the JQuery AJAX GET to return", 3000); // TODO: other tests might check size of XML file, whether it is valid XML expect($.ajax_get_xml_request.has_returned).toEqual(true); }); });

¿Cómo pruebo que se ha llamado a la devolución de llamada? Cualquier sugerencia de blogs/material relacionado con la prueba de jQuery asíncrono con Jasmine será muy apreciada.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Supongo que hay dos tipos de pruebas que puedes hacer:

  1. Pruebas unitarias que falsifican la solicitud de AJAX (utilizando los espías de Jasmine), lo que le permite probar todo su código que se ejecuta justo antes de la solicitud de AJAX y justo después . Incluso puedes usar Jasmine para falsificar una respuesta del servidor. Estas pruebas serían más rápidas, y no necesitarían manejar el comportamiento asincrónico, ya que no hay ningún AJAX real en marcha.
  2. Pruebas de integración que realizan solicitudes AJAX reales. Estos tendrían que ser asíncronos.

Jasmine puede ayudarte a hacer ambos tipos de pruebas.

Aquí hay una muestra de cómo puede falsificar la solicitud de AJAX y luego escribir una prueba de unidad para verificar que la solicitud de AJAX falsificada iba a la URL correcta:

 it("should make an AJAX request to the correct URL", function() { spyOn($, "ajax"); getProduct(123); expect($.ajax.mostRecentCall.args[0]["url"]).toEqual("/products/123"); }); function getProduct(id) { $.ajax({ type: "GET", url: "/products/" + id, contentType: "application/json; charset=utf-8", dataType: "json" }); }

Para usar Jasmine 2.0 en su lugar:

 expect($.ajax.calls.mostRecent().args[0]["url"]).toEqual("/products/123");

como se indica en esta respuesta

Aquí hay una prueba de unidad similar que verifica que se ejecutó su devolución de llamada, luego de que una solicitud AJAX se completó con éxito:

 it("should execute the callback function on success", function () { spyOn($, "ajax").andCallFake(function(options) { options.success(); }); var callback = jasmine.createSpy(); getProduct(123, callback); expect(callback).toHaveBeenCalled(); }); function getProduct(id, callback) { $.ajax({ type: "GET", url: "/products/" + id, contentType: "application/json; charset=utf-8", dataType: "json", success: callback }); }

Para usar Jasmine 2.0 en su lugar:

 spyOn($, "ajax").and.callFake(function(options) {

como se indica en esta respuesta

Finalmente, ha insinuado en otra parte que es posible que desee escribir pruebas de integración que realicen solicitudes AJAX reales, con fines de integración. Esto se puede hacer usando las características asincrónicas de Jasmine: waits(), waitsFor() y runs():

 it("should make a real AJAX request", function () { var callback = jasmine.createSpy(); getProduct(123, callback); waitsFor(function() { return callback.callCount > 0; }); runs(function() { expect(callback).toHaveBeenCalled(); }); }); function getProduct(id, callback) { $.ajax({ type: "GET", url: "data.json", contentType: "application/json; charset=utf-8" dataType: "json", success: callback }); }
over 4 years ago · Santiago Trujillo Relatório

0

Mire el proyecto jasmine-ajax: http://github.com/pivotal/jasmine-ajax .

Es un ayudante directo que (ya sea para jQuery o Prototype.js) se conecta a la capa XHR para que las solicitudes nunca salgan. A continuación, puede esperar todo lo que desee sobre la solicitud.

Luego, le permite proporcionar respuestas de dispositivos para todos sus casos y luego escribir pruebas para cada respuesta que desee: éxito, fracaso, no autorizado, etc.

Saca las llamadas de Ajax del ámbito de las pruebas asincrónicas y le brinda mucha flexibilidad para probar cómo deberían funcionar sus controladores de respuesta reales.

over 4 years ago · Santiago Trujillo Relatório

0

aquí hay un conjunto de pruebas de ejemplo simple para una aplicación js como esta

 var app = { fire: function(url, sfn, efn) { $.ajax({ url:url, success:sfn, error:efn }); } };

un conjunto de pruebas de muestra, que devolverá la llamada en función de la expresión regular de URL

 describe("ajax calls returns", function() { var successFn, errorFn; beforeEach(function () { successFn = jasmine.createSpy("successFn"); errorFn = jasmine.createSpy("errorFn"); jQuery.ajax = spyOn(jQuery, "ajax").andCallFake( function (options) { if(/.*success.*/.test(options.url)) { options.success(); } else { options.error(); } } ); }); it("success", function () { app.fire("success/url", successFn, errorFn); expect(successFn).toHaveBeenCalled(); }); it("error response", function () { app.fire("error/url", successFn, errorFn); expect(errorFn).toHaveBeenCalled(); }); });
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda