1

我想知道是否有任何方法可以在不复制代码的情况下使用和不使用 javascript 运行黄瓜场景。

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

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

我真的很想避免这种代码重复。我正在试验周围的钩子,希望我可以简单地调用块,然后用

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

但是,这不起作用。

任何人都知道如何实现这一点?

PS我对Ruby很陌生,刚开始使用黄瓜。

4

3 回答 3

1

根据 Jon M 使用环境变量的解决方案,您需要在每个场景运行之前设置 current_driver(这似乎比更改 default_driver 更好)。

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

然后运行

cucumber .
USE_JS_DRIVER=1 cucumber .
于 2012-10-23T15:49:57.060 回答
1

看起来你需要两个不同的场景。我会使用背景功能来避免步骤定义,但这只是个人喜好问题。

于 2012-06-06T07:40:09.533 回答
0

如果您不想创建单独的功能来处理两种类型的浏览器,那么一种解决方案是使用环境变量告诉 cucumber 使用哪种类型的浏览器驱动程序,并调用 cucumber 两次。

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

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

然后你可以运行其中一个/两个:

cucumber .
USE_JS_DRIVER=1 cucumber .

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

于 2012-06-06T08:29:23.057 回答