使用 Jasmine 测试主干视图时,浏览器页面不断刷新
Browser page keeps refreshing when testing Backbone views with Jasmine
运行以下 Jasmine test(1),测试成功执行,但我面临主测试页面的递归加载。
这是我的测试 (1) 和我运行测试 (2) 的模块:
有什么想法吗?如何解决此问题?
附言:
该问题仅涉及Chrome和Safari浏览器。
下面是一个示例:jsfiddle.net/shioyama/EXvZY
(1)
describe('When Submit button handler fired', function () {
beforeEach(function () {
spyOn(MyView.prototype, 'submitForm');
this.view = new MyView();
this.view.render();
this.view.$el.find('form').submit();
});
it('submitForm should be called', function () {
expect(MyView.prototype.submitForm).toHaveBeenCalled();
});
});
(二)
var MyView = Backbone.View.extend({
events: {
'submit form' : 'submitForm'
},
submitForm: function (event) {
event.preventDefault();
// some code
}
});
Backbone 使用委托事件,这些事件在创建视图时绑定。您的 view.el 在创建时不包含窗体,而是在 render 方法中创建一个窗体。这就是提交委托事件未绑定的原因,而是在页面上提交表单。该表单提交将转到同一 URL,这会触发 Jasmine 套件再次运行,从而导致循环。
如果您稍微修改一下代码,您会发现此版本有效,因为 元素在生成视图之前就已存在。
var MyView = Backbone.View.extend({
events: {
'submit form' : 'submitForm'
},
submitForm: function (event) {
event.preventDefault();
// some code
}
});
//start test runner right after we're done defining our tests in this script
window.setTimeout( function(){
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
jasmine.getEnv().execute();
}, 0 );
//TESTS GO HERE
describe('When Submit button handler fired', function () {
beforeEach(function () {
spyOn(MyView.prototype, 'submitForm').andCallThrough();
this.view = new MyView({
el: $('<div><form><input type="submit" value="Submit" /></form></div>')
});
this.view.$el.find('form').submit();
});
it('submitForm should be called', function () {
expect(MyView.prototype.submitForm).toHaveBeenCalled();
});
});
相关文章:
- Jquery Draggable-在浏览器刷新时保持位置
- 我创建了一个Javascript待办事项列表,但想知道如何在浏览器刷新后保留这些帖子
- 在浏览器刷新时保存XHR渲染状态
- 如何进行允许浏览器刷新的匿名Firebase登录
- 如何单独检测浏览器刷新
- 在浏览器刷新上重复数据-Nodejs
- AngularJs:UI路由器浏览器刷新,移动到第一个子状态
- 从数组空值到浏览器刷新的 Javascript 变量
- 锚链接是指在浏览器刷新、后退和前进时不起作用的页面部分
- 如何在浏览器刷新时记住您的 iframe 指向哪个 HRREF
- AngularJS:cookie 在浏览器刷新时失败
- 当浏览器刷新本地存储刷新时
- 如何防止我的计时器在浏览器刷新时重置
- 浏览器刷新时的随机全屏背景图像
- jQuery在浏览器刷新时丢失XML数据
- 通过javascript/jquery限制浏览器刷新,f5,像银行网站一样返回浏览器
- 文档's总高度函数's的返回值在浏览器刷新时发生更改(F5)
- 如何在javascript或jquery中跟踪浏览器刷新/返回/选项卡关闭和浏览器关闭事件
- onblur事件不'如果用户在文本字段中输入值并直接按下浏览器刷新按钮,则无效
- 浏览器刷新时,JQuery多选复选框下拉列表未被取消选中