Testando chamadas $ .ajax com Jasmine 2

Uma maneira rápida e fácil de implementar testes para suas chamadas de aplicativos Ajax (assumindo jQuery aqui, mas funcionará com praticamente todo o resto).

Envolve espionar o método ajax original, criar um retorno de chamada espionado e fornecer alguns dados falsos que serão esperados usando uma promessa resolvida.

Portanto, uma implementação muito simples do método que queremos testar poderia ser algo como:

Async.prototype.fetch = function (cb) {
$
.ajax('/url')
.done(function (data) {
cb
(data);
});
};

Aqui, estamos simplesmente pegando um URL e executando um retorno de chamada nos dados retornados.

Quanto ao teste Jasmine, aqui está um exemplo de implementação completa:

describe("Async", function () {
it
("should fetch from a server", function () {
var async = new Async();

// creating our spied callback
var callback = jasmine.createSpy('callback');
var data = [
{x: 0, y: 0},
];

spyOn
($, 'ajax').and.callFake(function (req) {
var d = $.Deferred();
// resolve using our mock data
d
.resolve(data);
return d.promise();
});

async.fetch(callback);

// grabbing the returned arguments from the spied call:
var fakeData = callback.calls.mostRecent().args[0];
expect
(fakeData[0].x).toEqual(data[0].x);
});
});

E aí está.