用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,所以对浏览器没有依赖,我们可以很容易地把测试加在持续集成中。
分享到:
相关推荐
赠送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...
赠送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...
赠送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...
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 及可使用。
赠送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...
赠送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文件,MAC使用时需存放在/Users/用户名/.gradle/caches/jars-3/某一缓存目录下,找不到就都看一下,我遇到的问题是缓存目录中下载的是2.4.17版本,应该跟gradle版本升级有关
- **领域特定语言(DSL)**:Groovy的简洁语法使其成为创建DSL的理想选择,如构建配置文件、测试框架等。 6. **Groovy与其他技术的集成** - Groovy可以无缝集成到Spring框架中,创建Spring Bean和配置文件。 - ...
1. **Spock**:Groovy还有一款强大的测试框架Spock,其基于行为驱动开发(BDD)理念,提供了简洁的语法来编写单元测试和集成测试。 在"groovy-binary-1.8.6"这个版本中,可能包含以下内容: - **JAR文件**:包含了...
最近的groovy-all-2.4.12.jar包供使用,解决as编译时报错问题
此外,Groovy还可以用于构建脚本、Web开发(如Grails框架)、自动化测试(Spock框架)、数据处理和集成等多种用途。 Groovy与Java的互操作性是其一大亮点。由于Groovy编译成字节码运行在JVM上,因此可以调用所有的...
赠送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 是一个重要的软件开发工具包,专为使用Groovy编程语言进行开发的程序员设计。Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java语言的功能,提供了简洁的语法和强大的元编程...
2. **GroovyShell和GroovyConsole**:这两个工具允许开发者在交互式的环境中测试Groovy代码,是学习和调试Groovy语法的好帮手。GroovyShell可以直接执行Groovy脚本,而GroovyConsole提供了一个带有源代码编辑器和...
groovy-all-2.1.6.jar groovy-all-2.1.6.jargroovy-all-2.1.6.jar
总的来说,Groovy SDK 4.0.3是一个完整的开发环境,它为Groovy开发者提供了编写、测试和运行代码所需的所有工具,是学习和使用Groovy语言的重要资源。通过安装和配置这个SDK,你可以开始探索Groovy的动态世界,体验...
10. **Spock测试框架**:Groovy还催生了Spock,一个功能强大的BDD/TDD测试框架,其语法简洁易懂,非常适合Groovy和Java项目的测试。 在下载并解压"apache-groovy-sdk-2.5.6.zip"后,开发者可以找到`groovy-2.5.6`...
赠送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...
10. **Testing and Debugging Tools**: 包括JUnit和Spock测试框架的支持,以及各种调试工具,便于测试和调试Groovy代码。 总之,“groovy-all-2.4.7.jar”是一个全面的Groovy运行时环境,包含了运行和开发Groovy...
groovy-all-2.4.7.jar