1

一部の友人が 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 ウィジェットとしてコーディングされているという事実ですか?

ありがとう

4

1 に答える 1