Sencha touch 开发中使用Jasmine 进行功能测试
2012-01-28 08:21
405 查看
对于Jasmine,我就不多做介绍了。可以去官网看看 http://pivotal.github.com/jasmine/
Sencha touch(以下简称ST)目前虽然有些bug,但是不影响项目的使用,因为我们只是利用了其部分的提供的特性与其UI部分。而个人感觉比较好的就是mixin,之前openlaszlo也是支持mixin,所以基本相差无几。在开发的过程中,目前做单元测试,比较不好做的,应该就是javascript。虽然也有jsunit,jasmine,dojo doh等等一些第三方的测试框架,但是相对来说,需求上还是无法满足自己想要的简单便利,或者就是复杂的逻辑或者过程,写单元测试会比较麻烦,对于很多刚接触javascript的员工,更是显得有点吃力了。
我选择jasmine,主要是因为ST的组也是在用。而且看了它的一些单元测试,包括去仔细研究了一下jasmine,发现这个玩意不错。就此引入项目。
在写这个简单的例子之前呢,我得对ExtJS的mixin做个基本的介绍。我们知道高级语言里边有Interface,像java,为了增强某些类的功能,或者是很多类可能拥有某些共有的功能,就只能通过抽象出接口来实现。javascript没有接口的概念,所以ExtJS引入了mixin.但它其实不是真实的接口。就是能增强某个类行为。很多人或许说,ExtJS Class System不是有继承么。但是我们要知道,对于一个类,实现单一继承远远是不够的。我们举例他们Component源码:
从上面可以看到,component继承的类为Ext.AbstractComponent,同时,它又拥有了Ext.mixin.Traversable类提供的方法接口。如果只用继承的话,是很难做到这一点的。
而且ExtJS引入了pureMVC,使用了到了常见的一些设计模式,比如controller,也是采用mixin的方式,来达到此类目的,
更多详细的内容,大家可以去看看其部分源码。
回到我们的主题,下面我像大家展示是如何做基本的测试的,首先定义自己的类,它是一个singleton,
那么下面测试其是否是一个单例,jasmine代码如下:首先得定义我们自己的matchers(https://github.com/pivotal/jasmine/wiki/Matchers):
第二步,写下我们的当前类的测试组
然后就可以进行测试了。测试结果图:
Sencha touch(以下简称ST)目前虽然有些bug,但是不影响项目的使用,因为我们只是利用了其部分的提供的特性与其UI部分。而个人感觉比较好的就是mixin,之前openlaszlo也是支持mixin,所以基本相差无几。在开发的过程中,目前做单元测试,比较不好做的,应该就是javascript。虽然也有jsunit,jasmine,dojo doh等等一些第三方的测试框架,但是相对来说,需求上还是无法满足自己想要的简单便利,或者就是复杂的逻辑或者过程,写单元测试会比较麻烦,对于很多刚接触javascript的员工,更是显得有点吃力了。
我选择jasmine,主要是因为ST的组也是在用。而且看了它的一些单元测试,包括去仔细研究了一下jasmine,发现这个玩意不错。就此引入项目。
在写这个简单的例子之前呢,我得对ExtJS的mixin做个基本的介绍。我们知道高级语言里边有Interface,像java,为了增强某些类的功能,或者是很多类可能拥有某些共有的功能,就只能通过抽象出接口来实现。javascript没有接口的概念,所以ExtJS引入了mixin.但它其实不是真实的接口。就是能增强某个类行为。很多人或许说,ExtJS Class System不是有继承么。但是我们要知道,对于一个类,实现单一继承远远是不够的。我们举例他们Component源码:
Ext.define('Ext.Component', { extend: 'Ext.AbstractComponent', alternateClassName: 'Ext.lib.Component', mixins: ['Ext.mixin.Traversable'], ... });
从上面可以看到,component继承的类为Ext.AbstractComponent,同时,它又拥有了Ext.mixin.Traversable类提供的方法接口。如果只用继承的话,是很难做到这一点的。
而且ExtJS引入了pureMVC,使用了到了常见的一些设计模式,比如controller,也是采用mixin的方式,来达到此类目的,
Ext.define('Ext.app.Controller', { alternateClassName: 'Ext.Application', mixins: { observable: 'Ext.util.Observable' }, ... });
更多详细的内容,大家可以去看看其部分源码。
回到我们的主题,下面我像大家展示是如何做基本的测试的,首先定义自己的类,它是一个singleton,
Ext.define('Ext.util.HashUtil', { statics: { getInstance: function() { if (!this.instance) { this.instance = new this(); } return this.instance; }, setInstance: function(instance) { this.instance = instance; return this; } }, ... });
那么下面测试其是否是一个单例,jasmine代码如下:首先得定义我们自己的matchers(https://github.com/pivotal/jasmine/wiki/Matchers):
beforeEach(function() { this.addMatchers({ isSingleton: function(instance){ var currentInstance = this.actual; return instance === currentInstance; } }); });
第二步,写下我们的当前类的测试组
describe("HashUtil", function() { var hashUtil; beforeEach(function() { hashUtil = Ext.util.HashUtil.getInstance(); }); it("HashUtil should be a singleton", function() { var hashUtil0 = Ext.util.HashUtil.getInstance(); expect(hashUtil).toBe(hashUtil0); }); ... });
然后就可以进行测试了。测试结果图:
相关文章推荐
- 使用git开发senchatouch集成了cordova之后的.gitignore配置
- sencha touch + PhoneGap(cordova) 使用 adt eclipse进行打包
- Sencha touch开发中使用图表EChart出现Initialize failed: invalid dom的解决办法
- 使用Sencha Touch 2MVC框架内嵌html开发
- Phonegap+Sencha Touch] 移动开发5、Sencha touch结合Phonegap使用
- 使用sencha cmd 进行开发,测试和生产prod.
- 使用 Jasmine 进行测试驱动的 JavaScript 开发
- 使用Eclipse开发Sencha Touch框架教程--安装开发环境和senchatouch
- [Phonegap+Sencha Touch] 移动开发2、PhoneGap初步使用
- 第二步 (仅供参考) sencha touch + PhoneGap(cordova 2.9 及其以下版本) 使用 adt eclipse进行打包
- [Phonegap+Sencha Touch] 移动开发3、使用Weinre调试PhoneGap/Cordova应用
- 使用 Jasmine 进行测试驱动的 JavaScript 开发
- [Phonegap+Sencha Touch] 移动开发38 sencha 2.3.2+ 在 安卓2.3上使用报错 - has no method 'bind'
- [Phonegap+Sencha Touch] 移动开发5、Sencha touch结合Phonegap使用
- [Phonegap+Sencha Touch] 移动开发70 cordova app中使用增强的webview
- Sencha Touch入门:Sencha Touch开发环境搭建及使用 Sencha Cmd 自动创建项目框架
- Sencha Touch入门:Sencha Touch开发环境搭建及使用 Sencha Cmd 自动创建项目框架
- [Phonegap+Sencha Touch] 移动开发17 使用桌面版chrome调试安卓设备上的chrome和webview
- SAP企业移动平台开发探索系列8 – 使用SenchaTouch开发HTML5跨平台应用