学习使用cucumber和相关技巧
12 Feb 2015参考资料
这次系统得学习一下cucumber,首先还是通过几个railscasts上的视频进行学习,虽然里面使用的是rails2,我还是用rails3及相关的gem重新实现了一遍。 实现代码:Learn cucumber
Railscasts上相关视频教程:
进一步深入学习的话还有两个资源可以参考:
技巧及经验总结
命令行参数
cucumber features
- -r :用于指定在那个或者那些目录下面寻找匹配的step definition
- -t :用于指定scenario的标签。例如: -t @focus, 或者排除指定标签: -t ~@focus
工具
Sublime可以安装Sublime Gherkin Formatter
这个插件,可以用于格式化表格数据,快捷键是:<Cmd> + <Shift> + |
DRY
- 可以使用background定义一系列的scenario需要用到步骤
- 可以使用scenario outline定义类似的一组测试
使用launchy gem调试
- 可以使用step:
Then show me the page
- 可以在step的定义里面调用:
save_and_open_page
- 可以用下面的方法当测试失败时,自动打开页面调试:
新建/features/support/debugging.rb
,
添加代码:
After do |scenario|
save_and_open_page if scenario.failed? and (ENV["debug"] == "open")
end
然后运行测试时加上debug环境变量
cucumber features debug=open
使用World扩展cucumber
- 使用Class进行扩展 例如,需要反复用到用户登录的功能,可以重构一个helper方法:
# features/support/login_helpers.rb
class LoginHelpers
def login_user(username)
visit("/login")
fill_in( "user name", :with => username )
fill_in( "password", :with => "tester" )
click_button( "login" )
page.should have_content("welcome")
end
def another_logging_method . . .
end
World do
LoginHelpers.new
end
# features/step_definitions/user/login.rb
When /^"(.?)" logs in do |username|
login_user(username)
end
- 使用Module扩展
# features/support/paths.rb
module NavigationHelpers
def path_to(page_name)
case page_name
when /the homepage/
root_path
when /the list of (.+)/
send "#{$1}_path"
when /the show page for (.+)/
polymorphic_path(model($1))
else
raise "Can't find mapping from \"#{page_name}\" to a path."
end
end
end