5

我有一个表单,它有一个附加到提交事件的处理程序,如下所示:

$('#myForm').bind('submit', $.proxy(this, 'form_onSubmit'));

我不知道如何测试这行代码以确保在提交表单时,它使用正确的事件处理程序。例如,这不起作用,因为页面一直在无限循环中提交自己:

describe('Submitting the form', function() {
    it ('Uses the correct event handler', function() {
        spyOn(myConstructor, 'form_onSubmit');
        $('#myForm').trigger('submit');
        expect(myConstructor.form_onSubmit).toHaveBeenCalled();
    });
});

我也一直在尝试使用:

expect($('#myForm')).toHandleWith('submit', myConstructor.form_onSubmit);

但由于我无法在任何地方找到一个可行的示例,我确定我使用不正确(Jasmine 抛出错误“无法读取未定义的属性'提交'”,其中未定义是 this.actual。数据(“事件”))。

有人可以帮忙吗?我已经玩了好几个小时了!谢谢。

4

1 回答 1

8

我正在使用 Jasmine jQuery 监视事件。

https://github.com/velesin/jasmine-jquery#event-sies

此外,我正在使用夹具模拟表单。

在表单本身(在夹具中)上,我将操作设置为“javascript:void(0)”以防止表单提交发生。

<form class="js-game-form" action="javascript:void(0)">
</form>

对于测试

describe("#submitForm", function(){
    it("should submit the form when you press one of the update buttons", function(){
      var spyEvent = spyOnEvent(formSelector, 'submit');
      $(updateButtonSelector).trigger("click");
      expect(spyEvent).toHaveBeenTriggered();
    });
});
于 2013-03-10T22:48:10.803 回答