我正在使用QUnit,Sinn.js(fakeServer)和jQuery(AJAX)捕获和测试程序中的AJAX调用。我遇到一个内联函数调用无法执行的问题(不一致)。
$.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'),
});
预期的执行行为是functionA
,后跟functionB
。
{strong>如果我写以这种方式? [functionA(), functionB()] : console.log('Error')
可以正常工作。为什么没有括号就无法使用?
修改1:
函数A和B都包含一个console.log('Working!');
,如果我在控制台中看到2条Working!
日志,我知道代码可以正常工作。我知道请求成功,因为server.requests
不为空,并且server.requests[0]
包含所有其他AJAX调用属性,例如:contentType,type,url和data。
这是sinon
的QUnit设置代码的样子(它拦截了测试期间进行的所有AJAX调用):
QUnit.module('unit tests', {
beforeEach: function() {
server = sinon.fakeServer.create();
},
afterEach: function() {
delete server;
}
});
答案 0 :(得分:0)
该问题是由我的设置引起的。由于安全配置(与url有关),AJAX调用被中止,因此未执行任何内联函数。在[functionA(), functionB()]
中添加方括号仅有效,因为函数会在调用期间执行,而不是在调用后执行。同样,如果typeof functionA == 'function' && typeof functionB == 'function'
返回了true
,则无论调用是否实际通过,这两个函数都将执行。
我通过更改一些安全配置解决了该问题。本质上是将要POSTED
的某些文件“白名单”。感谢所有提供帮助的人!