【问题标题】:The After hook in cucumber黄瓜中的后钩
【发布时间】:2012-02-06 16:09:43
【问题描述】:

伙计们,

我在使用Afterhook 时遇到了一些问题。我在这样的文件夹中组织了我的测试:

features/Accounts/accounts_api.feature
features/Accounts/step_definition/account_steps.rb

features/labs/create_lab.feature
features/labs/step_definition/labs_steps.rb

现在我在帐户功能的步骤定义中有一个After 挂钩,我希望该挂钩在“帐户”功能的每个场景之后运行,但我不希望它在每个场景之后运行“实验室”功能。我试过这个:

cucumber --tags @newlabs

上面应该运行标记为newlabs 的实验室功能中存在的所有场景,但我看到的是,一旦标记为@newlabs 的场景运行帐户的步骤定义中存在的@after 钩子开始跑。我在想为什么会这样,是我用错了钩子还是我对钩子的整体理解错了?

非常感谢您花时间回复,这很有帮助。

【问题讨论】:

    标签: ruby-on-rails ruby cucumber


    【解决方案1】:

    Hooks 不关心它们位于哪个步骤定义脚本中,并且会针对每个场景运行。或者,更具体地说,无论您传递给 Cucumber 的标签是什么,您的 after 钩子都将在每个运行的场景之后运行,对于每个功能。

    如果您想对此进行更多控制,请查看 Cucumber wiki page on hooks 并查看名为“标记挂钩”的部分。

    【讨论】:

      【解决方案2】:

      可能你在错误的地方定义了After 钩子。请注意,After 挂钩(以及其他挂钩)必须在.rb 中定义,而不是在.feature 文件中。钩子的常见位置是features/support/hooks.rb。你会这样定义你的钩子:

      # features/support/hooks.rb
      After('@newlabs') do # will run after each scenario tagged with @newlabs 
         # your teardown ruby code 
      end
      
      # features/Accounts/accounts_api.feature
      @newlabs # tag all scenarious of this feature with @newlabs tag
      Feature: your feature
      
      Scenario: your scenario
        Given: ...
        When: ...
        Then: ...
      

      在 cucumber 输出中,你不会看到 After 钩子被执行(除非你从钩子定义中向 STDOUT 输出一些东西) - hooks 将隐式运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-17
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多