Vous espionnez la méthode trop tard.
Lorsque vous affectez this.view
, je suppose qu'il s'agit d'un appel comme new Views.SomeView()
. C'est cet appel new
qui fera la fonction initialize
être exécutée.
Mise à jour
Je ne recommande pas vraiment faire cela parce qu'il est assez désordonné, mais vous pouvez peut-être faire quelque chose comme ce qui suit: (Je ne sais pas, mais c'est sinon comment vous le feriez avec les objets d'espionnage de jasmin de base)
it('should call my method', function(){
var dummyView = new Views.SomeView();
spyOn(dummyView, "myMethod");
spyOn(Views, "SomeView").andCallFake(function() {
dummyView.initialize();
return dummyView;
});
new Views.SomeView();
expect(dummyView.myMethod).toHaveBeenCalled();
});
autre Possiblilty
il semble que cela pourrait être possible de remplacer cette méthode avec comme py comme ci-dessous. Si cela fonctionne, c'est probablement le moyen le plus propre de le faire.
it('should call my method', function(){
spyOn(Views.SomeView.prototype, "myMethod");
new Views.SomeView();
expect(Views.SomeView.prototype.myMethod).toHaveBeenCalled();
});
Y a-t-il un moyen d'espionner plus tôt? Peut-être espionner le prototype de Backbone.View? – chchrist
Peut-être. Essayez quelque chose comme ce que j'ai ajouté. Je ne recommande pas vraiment cela. Il commence à devenir méchant et ne vous donnera peut-être pas grand-chose en matière de test. –
Le deuxième exemple fonctionne comme charme. Merci! – chchrist