如何使用Jasmine测试POST请求?

3

我正在尝试使用Jasmine测试JavaScript中的一个函数,但是我遇到了一个问题。我没有找到任何有关如何测试$.post或$.get函数的信息,而且因为我正在使用异步的done ($.deferred),所以不知道如何处理它。以下是代码:

function registrarUsuario(cel, eMail, nombre){
$.post(url, {
       phone_number : cel,
       email : eMail,
       name : nombre
       }).done(exitoso(data))} 

问题是:我如何使用jasmine测试$.post或$.get函数,并使用jqXHR的done函数。
函数exitoso(data)如下所示:
function exitoso(data){
navigator.notification.alert('User register',
                             alertDismmissed(nombre, eMail, cel),
                             'Sucess');}

我遇到了一个关于数据ErrorReference的错误,但是我不得不按照以下方式更改代码$.post(...).done

.done(function(data){
 exitoso(data);
}

也可以写成以下形式:

.done(exitoso);

感谢Andreas Köberle的回答。

1个回答

3
所以你可以监视$.post并返回一个已解决的延迟对象:
var dfr = new $.Deferred();
dfr.resolve({data: "data"})
jasmine.spyOn($, 'post').andReturn(dfr)
registrarUsuario()

另一个解决方案是使用sinonJs的fakeServer

this.server = sinon.fakeServer.create();
this.server.respondWith('{data: "data"}');
server.autoRespond = true;
registrarUsuario()

使用Jasmine时,它显示了这个错误:"error ReferenceError: data is not defined",你知道该怎么办吗?也许可以使用callFake,我已经尝试过使用spyOn('data')和其他方法来避免将变量视为null。 - Carlos Duque Yemail
你应该监听 exitoso,以检查它是否被调用。也许你可以发布更多的代码,这样就不难猜测 exitoso 是什么,以及如何在你的示例中监听它。 - Andreas Köberle
Andreas,感谢您的时间,我已经添加了我正在使用的所有代码。我知道exitoso没有被调用,因为它在数据引用错误上卡住了。 - Carlos Duque Yemail
对不起,我找到了错误,我将纠正我的问题,顺便谢谢你给了我提示!这是因为函数的调用方式不正确。 - Carlos Duque Yemail
啊,好的,问题在于你调用了 done(exitoso(data)),我认为你真正想要做的是在 ajax 调用成功后执行函数 exitosodone(exitoso) - Andreas Köberle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接