Javascript 使用Jasmine为JSTree截取AJAX响应

Javascript 使用Jasmine为JSTree截取AJAX响应,javascript,ajax,unit-testing,jasmine,jstree,Javascript,Ajax,Unit Testing,Jasmine,Jstree,试图帮助一些朋友为他们的Javascript编写单元测试,但遇到了一个我以前从未遇到过的问题。它们在应用程序中非常简单地使用了JStree,通过AJAX调用从服务器加载数据 var loadHelpValues = function() { $('#dhAttrValues').jstree({ json_data: { ajax: { type: 'get', dataTyp

试图帮助一些朋友为他们的Javascript编写单元测试,但遇到了一个我以前从未遇到过的问题。它们在应用程序中非常简单地使用了JStree,通过AJAX调用从服务器加载数据

    var loadHelpValues = function() {
    $('#dhAttrValues').jstree({
        json_data: {
            ajax: {
                type: 'get',
                dataType: 'json',
                url: function (node) {
                    if (node == -1) {
                        return "/Item/treeValue/showTreeRoots";
                    } else  {                               
                        return "/Item/treeValue/showTreeChildren?parentId=" + node.attr('valueid') +"&rowId="+node.attr('rowid');
                    }
                },
                data: function(n) {
                    return "dept="+$('#dept').val()+"&attributeId="+$('#dhTitle').data('attributeid');
                },                        
                success: function(new_data, textStatus) {
                    return new_data;
                },
                error: function(XMLHttpRequest,textStatus,errorThrown) {
                    item.checkForSessionTimeoutAndRemoveErrors(XMLHttpRequest.responseText);
                }
            },
            progressive_render: true,
            progressive_unload: true
        },
        core: {html_titles:true},
        themes: {theme:"apple", dots:false, icons:false},
        plugins: ["themes","json_data"]         
    });
这在浏览器中运行得很好,但是我在编写Jasmine测试来验证行为时遇到了问题。我有一些最小的伪HTML,我在上面调用这个函数。我想模拟AJAX调用,这样我就可以返回一些虚假数据,并验证它是否以适当的格式显示在div中(是的,我知道这基本上是在测试JSTree小部件,但这是为了以后在这些节点上添加额外的行为和单击事件测试)

通常在Jasmine中,每当我想删除AJAX请求时,我就可以在代码中添加一些虚假数据——我可以使用这样一个简单的spyOn

spyOn($, "ajax").andCallFake(function(params){
params.success(
    [
        {"data":"Solid", "attr": {"id":"dhValue521f6364fe334d21c3917da6","valueId":"521f6364fe334d21c3917da6","value":"Solid","title":"Solid","selectable":false},"state":""},
        {"data":"Polka Dot","attr":{"id":"dhValue521f6364fe334d21c3917da8","valueId":"521f6364fe334d21c3917da8","value":"Polka Dot","title":"Polka Dot","selectable":false},"state":""},
    ]
)
}))

但由于某些原因,这不适用于JStree——它仍然试图从我的单元测试中发出真正的AJAX调用。我甚至在JStree源代码中验证了它确实调用$.ajax来从服务器获取数据,因此这应该是可行的。尝试了我所能想到的所有可能的选择,并到处搜索

有人能做到这一点吗?或者能够指出我的AJAX存根出了什么问题?是JStree被编码为JQuery小部件的事实导致了这些问题吗

感谢您签出,这在较低级别模拟了XHR请求,应该可以工作了。上面有完整的文档