【问题标题】:Sinon.js inline callback on successSinon.js 内联成功回调
【发布时间】:2018-12-01 01:49:12
【问题描述】:

我正在使用 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。

这是我为sinon 设置的 QUnit 代码(这会拦截测试期间进行的所有 AJAX 调用):

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

【问题讨论】:

  • 因为你没有打电话给他们。
  • @DaveNewton 它适用于实际应用程序(外部单元测试)。
  • 我的错——我什至不知道你能做到这一点,但看起来你可以。如果他们没有被调用,那就意味着请求没有成功,不是吗?
  • 请求成功!它们不会在测试场景中被“执行”。我有一种强烈的感觉,这与 Sinon.js 有关(嗅探 AJAX 发布请求并可能“创建”函数但实际上并未运行它们)
  • 你怎么知道的?如果函数没有被调用,有什么成功的迹象?没有错误处理程序,很难说。无论如何,如果没有更多信息,不确定如何提供帮助。

标签: javascript jquery ajax callback sinon


【解决方案1】:

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

我通过更改一些安全配置解决了这个问题。基本上将某些文件“列入白名单”为POSTED。感谢所有帮助过的人!

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2012-10-02
    • 2012-03-10
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多