【发布时间】: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