0

ジャスミンを使用していくつかの JavaScript コード (バックボーン ビュー) をテストしようとしています。

テストしようとしている定義済みの BackBone ビュー内の関数は次のとおりです。

var aView = Backbone.View.extend({

events: {
       'click #btn': 'update'
        } 

update: function(e){
    e.preventDefault();
    $.ajax({
    ....
    });
}

});

したがって、関数をテストするために、関数を呼び出してから、spyOn $.ajax を呼び出して、適切な URL で呼び出されたかどうかを確認します。しかし、問題は、イベントを関数に渡して ajax を実行できないことです。

ジャスミンのコード ブロックは次のとおりです。

it("tests update ajax", function() {

             spyOn($, "ajax");

             //Call update function
            this.aView.update(this.aView.$("#btn").trigger("click"));

            expect($.ajax).toHaveBeenCalled();

});

現在受け取っているエラーは次のとおりです。

TypeError: Object [object Object] has no method 'preventDefault'

必要なすべての情報を提供して、質問が正確であることを願っています:)

4

1 に答える 1

2

update メソッドを直接呼び出さないでください。イベントをトリガーすると、更新メソッドが呼び出されます。

以下は、現在のエラーを削除する必要があります。

it("tests update ajax", function() {

        this.aView.$el.find('.update').trigger("update");
        this.aView.update(this.aView.$("#btn").trigger("click"));

});

ビューにこれがある場合:

var aView = Backbone.View.extend({

  events: {
    'click a.update' : 'update'
  },

  update: function(e){
    e.preventDefault();
    $.ajax({
      ....
    });
  }
});

これにより、ビュー イベントが正しく設定されているかどうかも確認できます。

于 2013-09-20T19:05:19.533 に答える