`
helian
  • 浏览: 17208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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

 

Mocking JavaScript 对象行为

 

Javascript的语言特点决定了其对象的行为可以在对象被定义好后被轻易改变。比如下面代码里这个简单的例子,Conference对象的getTheName方法被定义为一个返回字符串的function

 

 

Conference.prototype.getTheName = function() {
return 'The name is ' + this.name
}

 

在javascript中我们可以指定另外一个function来替换getTheName的行为,用Sumatra也可以一样轻松做到:

 

 

 

load('conference.js')
def conference = getJsObject('minnesotaBarCamp')
assert 'The name is Minnebar' == conference.getTheName()
// mock out the method getTheName() to be something else
conference.getTheName = newFunction('function(){ return "The name is NOT " + this.name }')
assert 'The name is NOT Minnebar' == conference.getTheName()

 newFunction方法返回一个function的引用,我们把它赋值于getTheName方法,其行为被替换掉了。

 

 

Mock 浏览器测试

Javascript通常要跟浏览器发生交互,操作DOM对象,显示隐藏DIV,更改CSS class什么的,比如下面代码中的expandSettings function

 

function expandSettings() {
var el = document.getElementById('settings')
el.className = 'expanded'
return el
}

 

在sumatra中,进行浏览器测试首先要调用initBrowser方法进行浏览器环境初始化,之后就可以调用createStubElement方法来模拟DOM对象方便我们测试javascript。

createStubElement方法第一个参数是DOM对象类型,第二个参数是对象的id,第三个参数是个map,里面包含了虚拟DOM对象

的其他属性。

 

 

 

initBrowser()
def stubElement = createStubElement(
'div',
'settings',
[className:'closed', innerHTML:'Hello World'])
assert 'closed' == stubElement.className
assert 'Hello World' == stubElement.innerHTML
assert 'settings' == stubElement.id
assert 'DIV' == stubElement.tagName
load(expandSettings.js')
def returnedElement = f('expandSettings')()
// className 属性被改变了
assert 'expanded' == returnedElement.className
// 其他属性没变
assert 'Hello World' == returnedElement.innerHTML
assert 'settings' == returnedElement.id
assert 'DIV' == returnedElement.tagName
// stubElement 的className属性也变了,因为他就是 returnedElement
assert 'expanded' == stubElement.className

 

上面代码中的f方法返回一个function的引用,接着进行了运行。这里其实用execJs也行。

 

使用JavaScript框架

现在已经很少有人不使用Prototype JQuery之类的JavaScript框架了,Sumatra对于引用框架的javascript测试也进行了很好的支持。如果使用Protoyupe框架的话,上面的expandSettings方法就要大变样了:

 

function expandSettings() {
var el = $('settings')
el.className = 'expanded'
return el
}
 

这里面使用了Prototype框架里的$方法。

在Sumatra中引用Prototype,可以直接调用initFramework('prototype')

无处不在的$方法也可以被调用,不过因为在groovy中$不能作为方法名,所以要加一层单引号来调用:

 

load(expandSettings2.js')
def element = '$'('settings')
assert 'closed' == element.className
assert 'Hello World' == element.innerHTML
assert 'settings' == element.id
assert 'DIV' == element.tagName
 

在你的项目中使用Sumatra

 

在Sumatra中我们可以用Groovy跟JavaScript进行很自然的交互,从而实现各种测试。因为Sumatra使用Rhino,所以对浏览器没有依赖,我们可以很容易地把测试加在持续集成中。

 

 

 

 

分享到:
评论

相关推荐

    groovy-3.0.9-API文档-中英对照版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...

    groovy-all-2.4.5-API文档-中英对照版.zip

    赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...

    groovy-all-2.4.13-API文档-中文版.zip

    赠送jar包:groovy-all-2.4.13.jar; 赠送原API文档:groovy-all-2.4.13-javadoc.jar; 赠送源代码:groovy-all-2.4.13-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.13.pom; 包含翻译后的API文档:groovy...

    groovy-all-2.4.15.jar

    org.gradle.api.resources.ResourceException: Could not get resource 'https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.jar'. ...重启 Android Studio 及可使用。

    groovy-all-2.4.5-API文档-中文版.zip

    赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...

    groovy-3.0.9-API文档-中文版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...

    groovy-all-2.4.15.jar.zip

    groovy-all-2.4.15.jar文件,MAC使用时需存放在/Users/用户名/.gradle/caches/jars-3/某一缓存目录下,找不到就都看一下,我遇到的问题是缓存目录中下载的是2.4.17版本,应该跟gradle版本升级有关

    groovy-all-2.4.8.jar

    - **领域特定语言(DSL)**:Groovy的简洁语法使其成为创建DSL的理想选择,如构建配置文件、测试框架等。 6. **Groovy与其他技术的集成** - Groovy可以无缝集成到Spring框架中,创建Spring Bean和配置文件。 - ...

    groovy-binary-1.8.6

    1. **Spock**:Groovy还有一款强大的测试框架Spock,其基于行为驱动开发(BDD)理念,提供了简洁的语法来编写单元测试和集成测试。 在"groovy-binary-1.8.6"这个版本中,可能包含以下内容: - **JAR文件**:包含了...

    groovy-all-2.4.12.jar

    最近的groovy-all-2.4.12.jar包供使用,解决as编译时报错问题

    groovy-2.3.6-installer

    此外,Groovy还可以用于构建脚本、Web开发(如Grails框架)、自动化测试(Spock框架)、数据处理和集成等多种用途。 Groovy与Java的互操作性是其一大亮点。由于Groovy编译成字节码运行在JVM上,因此可以调用所有的...

    groovy-2.5.1-API文档-中英对照版.zip

    赠送jar包:groovy-2.5.1.jar; 赠送原API文档:groovy-2.5.1-javadoc.jar; 赠送源代码:groovy-2.5.1-sources.jar; 赠送Maven依赖信息文件:groovy-2.5.1.pom; 包含翻译后的API文档:groovy-2.5.1-javadoc-API...

    apache-groovy-sdk-4.0.1下载

    Apache Groovy SDK 4.0.1 是一个重要的软件开发工具包,专为使用Groovy编程语言进行开发的程序员设计。Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java语言的功能,提供了简洁的语法和强大的元编程...

    apache-groovy-sdk-3.0.6.zip

    2. **GroovyShell和GroovyConsole**:这两个工具允许开发者在交互式的环境中测试Groovy代码,是学习和调试Groovy语法的好帮手。GroovyShell可以直接执行Groovy脚本,而GroovyConsole提供了一个带有源代码编辑器和...

    groovy-all-2.1.6.jar

    groovy-all-2.1.6.jar groovy-all-2.1.6.jargroovy-all-2.1.6.jar

    groovy-sdk-4.0.3

    总的来说,Groovy SDK 4.0.3是一个完整的开发环境,它为Groovy开发者提供了编写、测试和运行代码所需的所有工具,是学习和使用Groovy语言的重要资源。通过安装和配置这个SDK,你可以开始探索Groovy的动态世界,体验...

    apache-groovy-sdk-2.5.6.zip

    10. **Spock测试框架**:Groovy还催生了Spock,一个功能强大的BDD/TDD测试框架,其语法简洁易懂,非常适合Groovy和Java项目的测试。 在下载并解压"apache-groovy-sdk-2.5.6.zip"后,开发者可以找到`groovy-2.5.6`...

    groovy-2.5.1-API文档-中文版.zip

    赠送jar包:groovy-2.5.1.jar; 赠送原API文档:groovy-2.5.1-javadoc.jar; 赠送源代码:groovy-2.5.1-sources.jar; 赠送Maven依赖信息文件:groovy-2.5.1.pom; 包含翻译后的API文档:groovy-2.5.1-javadoc-API...

    groovy-all

    10. **Testing and Debugging Tools**: 包括JUnit和Spock测试框架的支持,以及各种调试工具,便于测试和调试Groovy代码。 总之,“groovy-all-2.4.7.jar”是一个全面的Groovy运行时环境,包含了运行和开发Groovy...

    groovy-all-2.4.7.jar

    groovy-all-2.4.7.jar

Global site tag (gtag.js) - Google Analytics