Sinon.js 成功时内联回调

Sinon.js inline callback on success

我正在使用 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), //we need to pass the information for security.
    success: typeof functionA == 'function' && typeof functionB == 'function'
             ? [functionA, functionB] : console.log('Error'),
  });

预期的执行行为是 functionA 后跟 functionB。 它有效,如果我这样写? [functionA(), functionB()] : console.log('Error')。为什么没有括号就不行?

编辑 1: 函数 A 和 B 都包含 console.log('Working!'); 如果我在控制台中看到 2 Working! 日志,我知道代码可以正常工作。我知道请求成功是因为 server.requests 不为空并且 server.requests[0] 包含所有其他 AJAX 调用属性,例如:contentType、type、url & data。

下面是我的 QUnit 设置代码 sinon 的样子(这拦截了测试期间进行的所有 AJAX 调用):

QUnit.module('unit tests', {
    beforeEach: function() {
        server = sinon.fakeServer.create();
    },  
    afterEach: function() {
        delete server;
    }
});

问题是由我的设置引起的。由于安全配置(与 url 有关),AJAX 调用正在 中止 ,因此没有执行任何内联函数。在 [functionA(), functionB()] 中添加方括号之所以有效,是因为函数会在 调用期间执行 ,但不是调用的结果。此外,如果 typeof functionA == 'function' && typeof functionB == 'function' 返回 true,无论调用是否实际通过,这两个函数都会执行。

我通过更改一些安全配置解决了这个问题。本质上"whitelisting"某些文件要POSTED到。感谢所有帮助过的人!