Fondamentalement, si vous vous moquez d'un objet en utilisant Sinon.js qui a une propriété qui est passée en rappel à jQuery.delegate vos attentes fictives échoueront lorsque vous déclenchez la méthode observée dans jQuery.delegate. Si vous exécutez la méthode à l'intérieur du corps d'une fonction anonyme que vous utilisez comme callback de jQuery.delegate vos attentes passeront.Objets mockés avec Sinon.js ne reconnaissent pas avoir leurs méthodes exécutées via un rappel jQuery.delegate
test("FAILS: Handler is invoked as callback from jQuery delegate method directly...", function() { var Controller, View, $el, c, v, mock; Controller = function() { var self = {}; self.handler = function(e) { console.log("got handled"); }; return self; }; View = function($el, controller) { var self = {}; self.render = function() { $el.html(""); $el.delegate("#derp", "keyup", controller.handler); }; return self; }; $el = jQuery(""); c = new Controller(); v = new View($el, c); mock = this.mock(c); v.render(); mock.expects("handler").once(); $el.find("input").val("bar").trigger("keyup"); equal($el.find("input").val(), "bar"); // passes! mock.verify(); });
test("WINS: Handler is invoked inside anonymous function...", function() { var Controller, View, $el, c, v, mock; Controller = function() { var self = {}; self.handler = function(e) { console.log("got handled"); }; return self; }; View = function($el, controller) { var self = {}; self.render = function() { $el.html(""); $el.delegate("#derp", "keyup", function(e) { controller.handler(e); }); }; return self; }; $el = jQuery(""); c = new Controller(); v = new View($el, c); mock = this.mock(c); v.render(); mock.expects("handler").once(); $el.find("input").val("bar").trigger("keyup"); equal($el.find("input").val(), "bar"); // passes! mock.verify(); });
que je fais quelque chose qui cloche?
Merci,
Erin
Doit être d'accord, si v2 fonctionne alors v1 devrait aussi. Est-ce que v1 échoue également avec un keyup réel? La v1 échoue-t-elle également lorsqu'elle est testée avec '.triggerHandler (" keyup ")'? –