Sinon.js成功内联回调

时间:2018-06-21 16:29:07

标签: javascript jquery ajax callback sinon

我正在使用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;
    }
});

1 个答案:

答案 0 :(得分:0)

该问题是由我的设置引起的。由于安全配置(与url有关),AJAX调用被中止,因此未执行任何内联函数。在[functionA(), functionB()]中添加方括号仅有效,因为函数会在调用期间执行,而不是在调用后执行。同样,如果typeof functionA == 'function' && typeof functionB == 'function'返回了true,则无论调用是否实际通过,这两个函数都将执行。

我通过更改一些安全配置解决了该问题。本质上是将要POSTED的某些文件“白名单”。感谢所有提供帮助的人!