2013-04-11 15 views
6

Ho aggiunto di recente uno e.preventDefault() a una delle mie funzioni javascript e ha infranto le specifiche del mio gelsomino. Ho provato spyOn(e, 'preventDefault').andReturn(true); ma ottengo e errore non definito. Come faccio a stub e.preventDefault()?Stub e.preventDefault() in un test al gelsomino

showTopic: function(e) { 
    e.preventDefault(); 
    midParent.prototype.showTopic.call(this, this.model, popup); 
    this.topic.render(); 
} 

it("calls the parent", function() { 
    var parentSpy = spyOn(midParent.prototype, "showTopic"); 
    this.view.topic = { 
     render: function() {} 
    }; 
    this.view.showTopic(); 
    expect(parentSpy).toHaveBeenCalled(); 
}); 
+0

La soluzione non ha funzionato? –

+0

@Asad no, ecco perché l'ho cancellato – Huy

+0

Il tuo 'spyOn (e, 'preventDefault')' è ok ma non hai passato 'e' a' showTopic() 'nel' it() '. È questo il punto? – zbynour

risposta

14

Un altro modo per creare oggetto fittizio (con spie necessari) è quello di utilizzare jasmine.createSpyObj() . Gli array contenenti i nomi spia devono essere passati come secondo parametro.

var e = jasmine.createSpyObj('e', [ 'preventDefault' ]); 
this.view.showTopic(e); 
expect(e.preventDefault).toHaveBeenCalled(); 
1

Devi passare un oggetto con un preventDefault campo che tiene la vostra spia:

var event = {preventDefault: jasmine.createSpy()} 
this.view.showTopic(event); 
expect(event.preventDefault).toHaveBeenCalled 
0

Questo è molto simile agli approcci in alto. Ho appena preso in giro l'evento e superato preventDefault con una spia sinon. La differenza era che dovevo identificare il tipo che era un clic sul mio test.

var e = { 
     type: 'click', 
     preventDefault: sinon.spy() 
     }; 
Problemi correlati