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