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