Ich versuche, ein sehr einfaches jQuery-Plugin zu testen, das einfach $ .ajax-Methode aufruft und seinen Inhalt in ein Element legt. Zum Testen verwende ich JsTestDriver und Sinon zum Mocking.jQuery Ajax-Test funktioniert nicht
Plugin-Datei sieht:
(function($) {
$.fn.transfer = function() {
$.ajax({
url : 'friends',
type : 'GET',
contentType : 'application/json',
dataType : 'json',
success : function(html) {
console.log("-"+html+"-");
console.log($(this));
$(this).html(html);
console.log("+"+$(this).html()+"+")
}
});
};
})(jQuery);
In der Theorie sehr einfaches Plugin.
Und dann habe ich einen Komponententest spöttischen Erfolgsfunktion geschrieben:
TestCase("Ajax ", {
'test response' : function() {
/*:DOC divElement = <div id="container" style="height: 100px;"></div>*/
sinon.stub(jQuery, "ajax").yieldsTo(
"success", 'alex');
$(this.divElement).transfer();
console.log("*"+$(this.divElement).text()+"*");
}
});
es scheint zu korrigieren. Wenn Sie dann diesen Test ausführen, werden die nächsten Zeilen über die Konsole gedruckt:
So erfolgreich Funktion empfängt "Alex" Zeichenfolge korrekt. Dann wird $ (this) reference ausgedruckt, die Nachricht wird mit der Funktion html() gesetzt, und wenn ich den vorherigen gesetzten Wert protokolliere, wird eine Null zurückgegeben. Und die letzte Protokollnachricht befindet sich in der Testdatei, wo Sie sehen können, dass AJAX-Text nicht gesetzt ist.
Weiß jemand, was ich falsch mache? Weil ich sicher bin, dass mir etwas fehlt, das ich jetzt nicht sehen kann.
console.log ($ (this)); bezieht sich auf das Ajax-Objekt - nicht das Element an das Plugin übergeben – mikevoermans
Sie json dataType mit Strings im Test mischen, schwer zu folgen, was Sie wollen – charlietfl