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