民间,
我在使用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
挂钩帐户的步骤定义开始运行。我在想为什么会发生这种情况,我是以错误的方式使用钩子还是我对钩子的整体理解错了?
非常感谢您花时间回复,这很有帮助。
答案 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将隐式运行。