backbone.js model和view视图的单元测试
程序员文章站
2022-07-08 16:24:18
...
backbone的模块化开发,需要引入测试流程保证代码的质量,
同时,若为敏捷开发,单元测试必不可少。
在此我们项目使用backbone开发后,引入的是karma和jasmine
进行单元测试的,我们以此为例来说明backbone的单元
测试方法。
model和collection的测试较为简单,网上有较多的方法,jasmine格式的
测试用例如下:
describe('Todo model', function() {
describe('when instantiated', function() {
it('should exhibit attributes', function() {
var todo = new Todo({
title: 'Rake leaves'
});
expect(todo.get('title'))
.toEqual('Rake leaves');
});
});
});
view层的测试:
view层的测试需要先初始化一个view,将view实例加载到
测试环境,测试环境实际上是个单页的js应用,需要一定的
初始化。其次,测试view层的事件和方法,以及界面元素。
加载到测试环境有两种方式,一种是直接用View类初始化,
另一种是通过路由加载。
还要注意view的生命周期,view视图加载到界面上后
如果不使用view.remove方法,则view的事件一直有效,
会影响其它view的测试。
测试用例:
同时,若为敏捷开发,单元测试必不可少。
在此我们项目使用backbone开发后,引入的是karma和jasmine
进行单元测试的,我们以此为例来说明backbone的单元
测试方法。
model和collection的测试较为简单,网上有较多的方法,jasmine格式的
测试用例如下:
describe('Todo model', function() {
describe('when instantiated', function() {
it('should exhibit attributes', function() {
var todo = new Todo({
title: 'Rake leaves'
});
expect(todo.get('title'))
.toEqual('Rake leaves');
});
});
});
view层的测试:
view层的测试需要先初始化一个view,将view实例加载到
测试环境,测试环境实际上是个单页的js应用,需要一定的
初始化。其次,测试view层的事件和方法,以及界面元素。
加载到测试环境有两种方式,一种是直接用View类初始化,
另一种是通过路由加载。
还要注意view的生命周期,view视图加载到界面上后
如果不使用view.remove方法,则view的事件一直有效,
会影响其它view的测试。
var View = Backbone.View.extend({ tagName:'div', template:_.template('<form><input type="hidden" id="uid" value="1"/>\n\ <input name="user" type="text">\n\ <input type="radio" name="sex">\n\ <input type="radio" name="sex" value="1" checked="checked">\n\ <button type="button">测试</button>\n\ </form>'), events:{ 'click button':'btnClk' }, initialize:function(){ }, render:function(){ this.$el.html(this.template()); return this; }, getUser:function(){ return {name:'小王'}; }, btnClk:function(){ console.log('btn clicked'); } });
测试用例:
describe('视图测试',function(){ beforeEach(function(){ this.view = new View(); this.view.render(); }); afterEach(function(){ this.view.remove(); }); it('视图加载测试',function(){ expect(this.view).not.toBeUndefined(); //应该包含的元素 var myElement = this.view.$el.find('#uid').size(); expect(myElement).toBe(1); var input = this.view.$el.find('input[type="text"][name="user"]').size(); expect(input).toBe(1); var radio = this.view.$el.find('input[type="radio"][name="sex"]:checked').size(); expect(radio).toBe(1); }); it('视图静态方法测试',function(){ expect(this.view.getUser).not.toBeUndefined(); expect(this.view.getUser(1).name).not.toBeUndefined(); }); it('视图事件测试',function(){ spyOn(this.view,'btnClk').andCallThrough(); this.view.delegateEvents(); this.view.$el.find('button').trigger('click'); expect(this.view.btnClk).toHaveBeenCalled(); }); });
上一篇: chosen 数据的动态更新
下一篇: iteye博客内容搜索
推荐阅读
-
backbone.js model和view视图的单元测试
-
超级简单的android通过view自带的方法进行裁剪视图,实现圆形,矩形和圆角
-
ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
-
thinkphp3.2.3的Model目录里是存放什么文件的,是如何与控制器和视图文件相关联的?
-
thinkphp3.2.3的Model目录里是存放什么文件的,是如何与控制器和视图文件相关联的?
-
Backbone.js框架中简单的View视图编写学习笔记_基础知识
-
简单了解Backbone.js的Model模型以及View视图的源码_基础知识
-
Backbone.js框架中简单的View视图编写学习笔记_基础知识
-
AngularJs中model、Controller(控制器)和View(视图)之间有什么样的关系?(图文)
-
javascript - 关于backbone.js里的model.set和model.get