Back

为titanium 增加单元测试(add unit tests for titanium)

发布时间: 2015-02-19 10:14:00

refer to: http://siwei.me/blog/posts/titanium-tishadow-unit-tests-using-tishadow

我们的主力项目之一: 乐股在线 (happy stock) 经过两个月的发展, 功能增加了很多, 所以需要增加单元测试了. 下面是个例子:

那么例子就从启动写起 . 

对于启动 app之后, 使用spec描述的话,应该是: 

describe('index page', function(){

  it('对于第一次运行,需要显示四个介绍图片', function(){

  })  

  it('对于没有登陆过的用户,需要显示登陆页面',function(){

  })  

  it('对于已经登陆过的用户,直接跳转到主页',function(){
  })  
})

是不是如果去掉 boiler plate code ( (), function(){}) 这些东西的话,看起来就跟普通的文字描述一样了? ^_^ 跑一下试试. 

先运行tishadow.

$ titanium build --target device --platform android --skip-js-minify --tishadow

在第二个terminal , 运行:

$ tishadow spec -t mocha-should --platform android

就可以看到结果了

2015-02-19 18:45:09 -- [INFO] Alloy compiled in 7.70866s
[INFO] 851 file(s) bundled.
[INFO] BUNDLE sent.
[INFO] [android, 4.1.2, 192.168.1.102] Connected
[INFO] [android, 4.1.2, 192.168.1.102] Connected
[INFO] [android, 4.1.2, 192.168.1.102] App Bundle HappyStock is not for this app: test_tishadow_spec
[INFO] [android, 4.1.2, 192.168.1.102] Unpacking new bundle: HappyStock
[INFO] [android, 4.1.2, 192.168.1.102] Requiring: appdata-private://HappyStock/spec//index_spec.js


  index page
    + 对于第一次运行,需要显示四个介绍图片 
    + 对于没有登陆过的用户,需要显示登陆页面 
    + 对于已经登陆过的用户,直接跳转到主页 


  3 passing (48ms)

这里会有几种情况 屏幕会卡死(卡死在 BUNDLE set 那一步):
1. 应该是网络问题. 重新运行一下即可.
2. 要有一个 tishadow 进程在运行 ( 见上面的  $ titanium build --target device --platform android --skip-js-minify --tishadow )
3. 设备上要打开 我们的app. 否则 tishadow 表示 设备已经丢失. 
4. 修改了titanium的非常规文件时 ( 除了xml, js, tss, 图片 之外的文件, 比如 增加文件夹, 增加lib/js, 修改了配置文件tiapp.xml 等) 都要重启tishadow server

现在,我们继续在Titanium的环境之下测试( 测试 titanium app的文字啊, button 啊啥的) ,这个才是我们最关心的.

describe('app启动后 (index.xml) ', function(){
  var Alloy = require('alloy')
  var $

  beforeEach(function(){
    $ = Alloy.createController('index');
  })

  it('对于第一次运行,需要显示四个介绍图片', function(){
    console.info('== 我们看看$ 是不是一个controller')
    $.should.equal('some var')
  })  

  it('对于没有登陆过的用户,需要显示登陆页面',function(){

  })  

  it('对于已经登陆过的用户,直接跳转到主页',function(){
  })  
})

保存, 运行 单元测试, 大约一段时间后, 看到结果:

[INFO] [android, 4.1.2, 192.168.1.102] Requiring: appdata-private://HappyStock/android/alloy/cont    1) "before each" hook


  0 passing (279ms)
  1 failing

  1) app启动后 (index.xml)  "before each" hook:
     ReferenceError: app_session is not defined

原来错误发生在 beforeEach 阶段.  说app_session 没有找到.

解决的办法, 目前看来比较奇葩: 把app/alloy.js 文件复制到 spec 文件中,再运行就可以了. 

同时记得运行的命令是:  (看到末尾的 --update 了么? 这样的话速度就会特别快)

$ tishadow spec -t mocha-should --platform android --update 

Back