在黄瓜钩后

时间:2012-02-06 16:09:43

标签: ruby-on-rails ruby cucumber

民间,

我在使用After挂钩时遇到了一些麻烦。我已将测试组织在这样的文件夹中:

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挂钩帐户的步骤定义开始运行。我在想为什么会发生这种情况,我是以错误的方式使用钩子还是我对钩子的整体理解错了?

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

2 个答案:

答案 0 :(得分:2)

Hooks不关心他们所处的步骤定义脚本,并且会针对每个场景运行。或者,更具体地说,无论您传递给Cucumber的标记如何,对于每个特征,您的后挂钩都会在每个运行的场景之后运行。

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

答案 1 :(得分: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: ...

在黄瓜输出中你不会看到After挂钩被执行(除非你从挂钩定义中输出STDOUT) - hooks将隐式运行。