【问题标题】:Step definition from multiple files for same scenario来自同一场景的多个文件的步骤定义
【发布时间】:2014-12-08 05:22:06
【问题描述】:

我有一个场景,它的步骤定义驻留在多个文件中。例如,登录步骤位于 login_steps.rb 中,搜索相关步骤位于 search_steps.rb 中

Cucumber 为不在 login_steps.rb 中的任何步骤输出未定义的步骤。步骤定义仅在其存在于 login_steps.rb 时运行。是否需要将一个场景的所有步骤定义放在同一个文件中?

我的文件夹结构

Project folder
└─ features
   ├─ pages
   ├─ scenarios 
   ├─ step_definitions
   └─ support

我使用的命令:

cucumber -r features features\scenarios\Test.feature

【问题讨论】:

  • 如果将step_definitions 文件夹移动到场景文件夹中会发生什么?
  • 还是一样的结果
  • 我搞定了。有一些与步骤定义文件同名的隐藏文件。我刚刚删除了它们。

标签: ruby cucumber


【解决方案1】:

Cucumber 和 POM 的全部意义在于您具有灵活性,无需为每个功能文件重新编写步骤。这是我的目录结构:

Root
 - features
   - step_definitions
     - step_definition.rb
   - support
      - env.rb
 - lib
  - BasePage.rb
 - feature.feature

基本上,使用此目录结构,只要您需要您要引用的特定页面(例如,您的 BasePage.rb 文件),您的步骤定义在哪里并不重要

require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'pages', 'BasePage')


And /^I do something$/ do
  @page = BasePage.new(@test_env)
  @page.verify_el(css)
end

【讨论】:

    【解决方案2】:

    我不熟悉 RoR 和 cucumber 的细节,但我确实使用 cucumber-jvm。支持使用来自不同文件的步骤。请注意文档https://github.com/cucumber/cucumber/wiki/Cucumber-Backgrounder#where-do-i-put-tests 专门提到了它。

    抱歉,我无法为具体问题提供更多帮助,但您尝试做的事情(使用不同文件中的步骤)是可行的。

    【讨论】:

      【解决方案3】:

      这可能是“违规”,但我会结合 Whitney Imura 和 Dave W 的答案,只是为了让答案更清楚......

      你问:

      "是否需要放置所有步骤 同一文件中的场景定义?”

      否。您可以将步骤定义放在各种文件夹中逻辑不同的文件中,只要您认为合适(示例如下)。毕竟,这只是 ruby​​ 代码。

      基本上您的命令对于运行在其他各种文件夹中具有步骤定义的单个功能是正确的...

      cucumber -r features features\entities\entity.feature
      

      如果你不按上面的方式运行,你会丢失stepdefs...这里我对当前项目执行测试作为演示的一种手段:

      cucumber
      60 scenarios (14 undefined, 46 passed)
      409 steps (32 skipped, 26 undefined, 351 passed)
      
      cucumber -r features
      60 scenarios (60 passed)
      409 steps (409 passed)
      

      Cucumber documentation 中所述,您可以安排测试以适应您对功能的逻辑分解:

      |__ features
      |   |__ entities
      |   |   |__ entity.feature
      |   |   |__ step_definitions
      |   |       |__ anything.rb
      |   |       |__ entity_steps.rb
      |   |__ locations
      |   |   |__ location.feature
      |   |   |__ step_definitions
      |   |       |__location_steps.rb
      |   |__ sites
      |   |   |__ step_definitions
      |   |__ step_definitions
      |   |   |__ local_assert_steps.rb
      |   |   |__ local_crud_response_steps.rb
      |   |   |__ local_email_steps.rb
      |   |   |__ local_file_steps.rb
      |   |   |__ local_script_steps.rb
      |   |   |__ local_steps.rb
      |   |   |__ local_web_steps.rb
      `   |   |__ local_xml_file_steps.rb   
          |__ support
              |__ env.rb
              |__ local_env.rb
              |__ local_transforms.rb
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-13
        • 2018-07-25
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 2019-09-28
        • 2023-02-03
        • 1970-01-01
        相关资源
        最近更新 更多