2013-04-11 10 views
6

Ostatnio dodałem e.preventDefault() do jednej z moich funkcji javascript i złamałem moją specyfikację jaśminu. Próbowałem spyOn(e, 'preventDefault').andReturn(true);, ale otrzymuję e jest niezdefiniowany błąd. Jak mogę skrótową e.preventDefault()?Stubbing e.preventDefault() w teście jaśminowym

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

Czy to rozwiązanie nie działa? –

+0

@Asad nie, dlatego go usunąłem – Huy

+0

Twój 'spyOn (e, 'preventDefault')' jest w porządku, ale nie przekazałeś 'e' do' showTopic() 'w' it() '. O to właśnie chodzi? – zbynour

Odpowiedz

14

Innym sposobem tworzenia atrapa obiektu (z szpiegów trzeba) jest użycie jasmine.createSpyObj() . Tablice zawierające nazwy szpiegów muszą być przekazywane jako drugi parametr.

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

Trzeba przekazać obiekt z preventDefault polowej, która posiada swój szpiega:

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

Jest to bardzo podobne do podejść u góry. Właśnie wyśmiałem wydarzenie i przekazałem preventDefault szpiegowi z sinon. Różnica polegała na tym, że musiałem zidentyfikować typ, który był kliknięciem mojego testu.

var e = { 
     type: 'click', 
     preventDefault: sinon.spy() 
     }; 
Powiązane problemy