2013-04-11 33 views
6

私は最近、私のjavascript関数の1つにe.preventDefault()を追加しました。これはジャスミン仕様を破ったものです。私はspyOn(e, 'preventDefault').andReturn(true);を試しましたが、eは未定義のエラーです。どのように私はe.preventDefault()?jasmineテストでe.preventDefault()をスタブする

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

解決策は機能しませんでしたか? –

+0

@Asadいいえ、私はそれを削除しました – Huy

+0

あなたの 'spyOn(e、 'preventDefault')'はOKですが、あなたは 'it()'の 'showTopic()'に 'e'を渡しませんでした。それはポイントですか? – zbynour

答えて

14

(必要なスパイと)モックオブジェクトを作成するための別の方法はjasmine.createSpyObj()を使用することです。 スパイ名を含む配列を2番目のパラメータとして渡す必要があります。

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

スタブんあなたはスパイを保持しているフィールドでpreventDefaultでオブジェクトを渡す必要があります:

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

これはtopのアプローチと非常によく似ています。私はちょうどそのイベントを嘲笑して、スパイと一緒にpreventDefaultを渡した。違いは、テストでクリックしたタイプを特定しなければならないということでした。

var e = { 
     type: 'click', 
     preventDefault: sinon.spy() 
     }; 
関連する問題