2012-06-06 79 views
1

我想知道是否有任何方式使用和不使用而无需复制代码JavaScript的运行黄瓜情况下运行黄瓜场景。如何使用和不使用的JavaScript代码,避免重复

我开发利用html5导航的网站。但是,如果浏览器不支持html5功能,它应该可以找到。

我想编写黄瓜测试,将测试导航。 我知道我可以用简单的黄瓜场景来测试基本的html导航。我可以使用相同的场景测试html5导航,但使用@javascript标记。

我更喜欢以避免此代码重复。 我周围挂钩尝试,希望我可以简单的调用块,然后调用相同的块与

Capybara.using_driver(Capybara.javascript_driver) { block.call } 

然而,这是行不通的。

任何人有任何想法如何实现这一点?

P.S. 我对Ruby很新,刚开始使用黄瓜。

回答

1

看起来你需要两种不同的场景。我会使用Background功能来避免步骤定义,但这是一个品味问题。

0

如果你不想创建单独的功能来处理这两种类型的浏览器,那么一个解决方案是使用一个环境变量来告诉黄瓜使用的浏览器驱动器的类型,并调用黄瓜的两倍。

你需要查询的环境变量设置正确的驱动程序,很可能在env.rb

if ENV['USE_JS_DRIVER'] 
    Capybara.current_driver = Capybara.javascript_driver 
end 

然后你既可以运行/两个:

cucumber . 
USE_JS_DRIVER=1 cucumber . 

你必须找到一些合并黄瓜运行结果的有用方法,但根据您的需求,这可能是比复制场景更简单的解决方案。

+0

我想我宁愿写预处理器,可以提取需要有和没有@javascript执行步骤。这种方式的覆盖率将是一致的 – acube

+0

刚刚使用这种方法在头几个小时,我的头撞在桌子上。只有第一个方案使用javascript_driver(如果没有@javascript标记)运行,因为current_driver在下一个方案运行之前重置为default_driver。如果你想所有的场景与javascript_driver运行,那么你需要设置default_driver Capybara.default_driver = Capybara.javascript_driver –

1

基于由Jon中号使用环境变量的解决方案,需要每个场景运行之前(这似乎不是改变default_driver更好)设置current_driver。

Before do 
    if ENV['USE_JS_DRIVER'] 
    Capybara.current_driver = Capybara.javascript_driver 
    end 
end 

,然后运行

cucumber . 
USE_JS_DRIVER=1 cucumber .