【问题标题】:How to run cucumber scenario with and without javascript avoiding code duplication如何在有和没有 javascript 的情况下运行黄瓜场景避免代码重复
【发布时间】:2012-06-10 05:11:16
【问题描述】:

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

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

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

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

调用相同的块
Capybara.using_driver(Capybara.javascript_driver) { block.call }

但是这不起作用。

有人知道如何实现吗?

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

【问题讨论】:

    标签: ruby testing selenium cucumber capybara


    【解决方案1】:

    看起来您需要两种不同的方案。我会使用Background 功能来避免步骤定义,但这只是个人喜好问题。

    【讨论】:

      【解决方案2】:

      根据 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 .
      

      【讨论】:

        【解决方案3】:

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

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

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

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

        cucumber .
        USE_JS_DRIVER=1 cucumber .
        

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

        【讨论】:

        • 我想我宁愿编写预处理器,它可以提取需要在有和没有@javascript 的情况下执行的步骤。这样覆盖范围就会保持一致
        • 在过去的几个小时里,我一直在用这种方法把头撞在桌子上。只有第一个场景使用 javascript_driver(如果您没有 @javascript 标签)运行,因为 current_driver 在下一个场景运行之前重置回 default_driver。如果您希望所有场景都使用 javascript_driver 运行,那么您需要设置 default_driver Capybara.default_driver = Capybara.javascript_driver
        猜你喜欢
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-25
        • 2013-04-10
        • 2018-12-19
        相关资源
        最近更新 更多