我正在使用Jasmine进行单元测试以使用Backbone.js测试应用程序(这是我第一次使用它们,所以我有点卡住了:/) 这是我的Backbone视图
define(['jquery','backbone','underscore','handelbars','models/story','text!templates/story.html',
'controllers/storyController'],
function($, Backbone, _,handelbars, story,storyTemplate,ctrl){
var View = Backbone.View.extend({
el: '#main',
events:{
'click .close-story' : 'closeStory',
}
// Some functions
});
return View;
});
和Jasmine的规格
define(['views/storyView'],function (storyView) {
describe("Testing the Story View ",function () {
var stView;
beforeEach(function(){
stView=new storyView({id:1});
stView.render();
})
it("Test if el is defined and trigger the click ",function () {
expect(stView.el).toBeDefined();
})
})
})
谢谢:)
答案 0 :(得分:0)
视图构造函数中有硬编码el: '#main'
。
这将评估加载AMD模块的时间。
当你运行jasmine单元测试时,我不认为你的应用程序的这个元素在Jasmine测试页面中是可用的,除非你以某种方式嘲笑它。您可以通过在构造函数上设置断点并检查DOM来测试它。
要使现有代码起作用,您应该在加载包含视图定义的模块之前,在运行测试的DOM jasmine上附加一个虚拟元素。
另一方面,最好删除硬编码的el: '#main'
(你可以告诉开发人员这是一个非常糟糕的编码实践)并在创建视图实例时传递元素引用,所以你可以做到
new storyView({id:1, el : $('<div/>'}); // dummy element for test