Как передать событие, вызванное jQuery, в функцию

0

Я пытаюсь проверить код javascript (BackBone View), используя жасмин

Вот функция в определенном представлении 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'

Надеюсь, я предоставил всю необходимую информацию и вопрос точно :)

Теги:
jasmine
backbone.js

1 ответ

2
Лучший ответ

Вы не должны вызывать метод обновления напрямую. Он будет работать, если вы инициируете событие, которое вызовет метод обновления.

Следующее должно удалить текущую ошибку:

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({
      ....
    });
  }
});

При этом вы также проверяете, правильно ли установлены ваши события просмотра.

  • 0
    В представлении событие объявлено как {'click #btn': 'update'} поэтому я пытаюсь передать это событие в функцию обновления ... это звучит неправильно, я что-то упустил?
  • 0
    Обновление: спасибо! получил его вместо вызова события в функции, которую я просто должен был вызвать щелчок, и функция будет вызвана. Я думал, что попробовал это ... о, хорошо работает сейчас :) .. поэтому пришлось изменить код внутри только на this.detailsView.$('#btnSave').trigger("click");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню