Jquery 可以将mockjax触发器设置为$.ajax预过滤器吗?

Jquery 可以将mockjax触发器设置为$.ajax预过滤器吗?,jquery,mockjax,Jquery,Mockjax,我刚刚发现了mockjax库,它似乎非常适合我的测试需求。我说“几乎”,因为有一件事我似乎无法模拟:$.ajaxPrefilter处理程序 通常在jQuery中,您可以指定: $.ajaxPrefilter(function() { doSomethingOnEveryAjaxCall(); }); 然后,每当有人使用$.ajax(或$.get,$.post等)时,就会调用doSomethingEveryajaxCall函数 但是,如果我这样做: $.mockjax({url: '/t

我刚刚发现了mockjax库,它似乎非常适合我的测试需求。我说“几乎”,因为有一件事我似乎无法模拟:
$.ajaxPrefilter
处理程序

通常在jQuery中,您可以指定:

$.ajaxPrefilter(function() {
    doSomethingOnEveryAjaxCall();
});
然后,每当有人使用
$.ajax
(或
$.get
$.post
等)时,就会调用
doSomethingEveryajaxCall
函数

但是,如果我这样做:

$.mockjax({url: '/test', responseText: 'test'});
$.ajax({url: '/test'});
未调用prefilter I设置(
doSomethingOnEveryAjaxCall


有没有办法修改该代码,以便即使在mockjax请求/响应时也能调用预过滤器?

事实证明mockjax能够触发ajax预过滤器。。。我只是忘了提供所有必要的标题,以使我的预过滤器真正触发。一旦我尝试使用正确的标题,预过滤器就会按预期触发

请求应该是全局的,在源代码中,全局选项请求被设置为false,但我没有看到任何使用插件选项更改它的方法,并且仍然不确定这是否会触发此事件。谢谢,可能是这样,但我不这么认为;即使我在jQuery的代码中重写
s.global=true
(对于
ajax
),它仍然不会触发预过滤器。mockjax将只模拟
$.ajax
函数。如果您想让它模拟
$。ajaxPrefilter
可以为
$创建一个模拟。ajaxPrefilter
可以在上层调用
$。ajax
mockjax(据我所知)在幕后调用真正的
$。ajax
(参见mockjax的第474行)。真正的
$.ajax
确实调用了预过滤器(通过第8026行左右调用的
InspectPrefilterTransports
),因此即使是mockjax模拟请求也应该触发预过滤器。然而,问题在于,出于某种原因,mockjax创建的模拟变量与真实的不太一样(可能是因为我传递给mockjax的参数),因此我只是想弄清楚如何使这些模拟变量更“真实”,以达到预过滤器触发的目的。