我想使用 jasmine 测试表单提交。
该表单在主干视图中定义,如下所示 (1)。
我实现了以下测试(2),但我不确定它是如何有效的。
例如,如果 textarea 为空,则应调用 onError 函数。
在这种情况下,使用茉莉花测试表单提交的最佳方法有什么想法吗?
(1)
var MyView = Backbone.View.extend({
events: {
'focus [data-tid="message"]' : 'focusForm',
'blur [data-tid="message"]' : 'blurForm',
'submit form' : 'submitForm'
},
focusedClass: 'is-form-focused',
focusForm: function () {
this.$el.find('form').addClass(this.focusedClass);
},
blurForm: function () {
this.$el.find('form').removeClass(this.focusedClass);
},
submitForm: function (event) {
event.preventDefault();
var formElement = event.currentTarget,
message = this.$el.find('.message');
if (formElement.checkValidity && !formElement.checkValidity()) {
this.onError();
} else {
// makes a POST ajax call
backendController.submitFeedback(message.val()).done(this.onSuccess).fail(this.onError);
}
},
onError: function () {
this.$el.find('.message').focus();
},
onSuccess: function () {
this.$el.find('.message').val('');
this.$el.find('form').removeClass(this.focusedClass);
}
});
(2)
describe('When Submit button handler fired', function () {
beforeEach(function () {
this.popupSpy = sinon.spy();
this.view.render();
this.view.$el.find('form').on('submit', this.popupSpy);
this.view.$el.find('form').trigger('submit');
});
it('submitForm should be called', function () {
expect(this.popupSpy.callCount).toBe(1);
});
});