您的位置:首页 > 其它

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源码:

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);
});

...
});


然后就可以进行测试了。测试结果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐