Javascript 成功时Sinon.js内联回调
我正在使用QUnit、Sinon.js(fakeServer)和jQuery(AJAX)捕获和测试程序中的AJAX调用。我遇到了一个问题(不一致),内联函数调用无法执行Javascript 成功时Sinon.js内联回调,javascript,jquery,ajax,callback,sinon,Javascript,Jquery,Ajax,Callback,Sinon,我正在使用QUnit、Sinon.js(fakeServer)和jQuery(AJAX)捕获和测试程序中的AJAX调用。我遇到了一个问题(不一致),内联函数调用无法执行 $.ajax({ contentType: 'application/x-www-form-urlencoded', async: bAsynchronous, type: 'POST', url: url, data: content + getSecurityURL(url,sData
$.ajax({
contentType: 'application/x-www-form-urlencoded',
async: bAsynchronous,
type: 'POST',
url: url,
data: content + getSecurityURL(url,sData), //we need to pass the information for security.
success: typeof functionA == 'function' && typeof functionB == 'function'
? [functionA, functionB] : console.log('Error'),
});
预期的执行行为是function
,然后是functionB
。
如果我写它,它会工作吗?[functionA(),functionB()]:console.log('Error')这样。为什么没有括号就不能工作
编辑1:
两个函数A和B都包含一个console.log('Working!')代码>如果我看到2工作,我知道代码工作正常代码>控制台中的日志。我知道请求成功是因为server.requests
不是空的,并且server.requests[0]
包含所有其他AJAX调用属性,例如:contentType、type、url和数据
下面是我的QUnit设置代码在sinon
中的样子(这会截取测试期间进行的所有AJAX调用):
这个问题是由我的设置引起的。由于安全配置(与url有关),AJAX调用正在中止,因此没有执行任何内联函数。在[function(),functionB()]
中添加括号只起作用,因为函数将在调用期间执行,而不是作为调用的结果。此外,如果typeof function=='function'&&typeof functionB=='function'
返回true
,则无论调用是否实际执行,这两个函数都将执行
我通过更改一些安全配置解决了这个问题。本质上是“白名单”某些要发布的文件。感谢所有帮助过我的人 因为你没有打电话给他们。@DaveNewton它在实际的应用程序(外部单元测试)中起作用。我的错——我甚至不知道你能做到,但看起来你能做到。如果他们没有被调用,那就意味着请求没有成功,不是吗?请求成功了!在测试场景中,它们不会被“执行”。我有一种强烈的感觉,这与Sinon.js(嗅探AJAX post请求,可能“创建”函数,但不实际运行它们)有关,你怎么知道?如果没有调用这些函数,有什么成功的迹象?没有错误处理程序,很难说。在任何情况下,不知道如何帮助没有更多的信息。
QUnit.module('unit tests', {
beforeEach: function() {
server = sinon.fakeServer.create();
},
afterEach: function() {
delete server;
}
});