用groovy测试javascript -- Sumatra框架 -- 第一部分


原作者Scott Vlaminck

http://refactr.com/blog/

scott@refactr.com

 

原文出自GroovyMag sampler,也就是免费下载的那一期。有兴趣的朋友可以去http://www.groovymag.com/注册并免费下载。

 

作者自称在开发RIA过程中使用了大量javascript。虽然可以用selenium+jsUnit进行测试,但这位老兄还是希望可以在持续集成中用java什么的进行测试。于是他想到了Rhino。拥有两年groovy使用经验的作者在不太好用的Rhino外面包了一层groovy,这就是他的Sumatra -- 一个在java下运行的javascript测试框架。

 

资源:

SVN: http://svn.assembla.com/svn/sumatra/trunk/sumatra

grails插件下载: http://plugins.grails.org/grails-sumatra/tags/RELEASE_0_2/grails-sumatra-0.2.zip

 

1. 测试简单javascript对象

 

 

Conference = function() {}
Conference.prototype = {
name:null,
sessions:new Array()
}
Session = function() {}
Session.prototype = {
title:null
}
var minnesotaBarCamp = new Conference()
minnesotaBarCamp.name = 'Minnebar'

 

以上javascript代码创建了两个有关系的模型,Conference 和 Session。然后创建了一个Conference 的实例,其中的sessions为空。将以上javascript存成一个文件:conference.js

 

 

class PrototypeTest extends sumatra.groovy.SumatraTestCase{

}

 写一个groovy测试,继承sumatra里面提供的SumatraTestCase就可以了。

 

 

load('conference.js')
def conference = getJsObject('minnesotaBarCamp')
// check attributes on the javascript object
assert 'Minnebar' == conference.name
assert null != conference.sessions
assert 0 == conference.sessions.length
 

在测试代码中,可以用load方法调用js文件。getJsObject方法则提供了引用javascript中object的途径。上面代码里的conference 就是对conference.js里minnesotaBarCamp 的引用。

之后的断言代码就没什么说的了,很简单明了。

 

 

load('conference.js')
def conference = getJsObject('minnesotaBarCamp')
assert 0 == conference.sessions.length
// using the 'init' builder instantiates a Session javascript object defined in conference.js
def session1 = init.Session()
session1.name = 'Metaprogramming in Groovy'
conference.sessions.push(session1)
// since these are JavaScript objects
// adding items to an array this way also works:
// conference.sessions[0] = session1
assert 1 == conference.sessions.length
assert "Metaprogramming in Groovy" == conference.sessions[0].name
 

 

 

当然通常我们调用的js里面不会实例化什么东西让我们调用的,我们要自己实例化,在SumatraTestCase中提供了init这个builder来帮忙。init.Session()就实例化了一个Session。

 

 

execJs('var object = new Object()')
execJs('object.message = "Hello World"')
def object = getJsObject('object');
assert 'Hello World' == object.message
 

在SumatraTestCase还可以用execJs直接运行javascript代码。上面的代码就是范例。

 

第二部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值