将黄瓜步骤或步骤文件限制为指定的功能或标记
我为我们的Web应用程序编写了一个模式幻灯片,其中显示了一组文档的导航并为这些文档提供了各种元数据。
这是具有深奥要求的应用程序中的一个重要组成部分,所以我认为它的核心场景(作为接受标准给出的)应该既众多又内部一致,这很公平。
为了避免为我们的许多场景采取新的步骤,我已经调整了一个帮助器,它将人类可读的术语(如document caption
转换为选择器:
module SelectorsHelper
def selector_for(term)
case term
# Lightbox / modal / fancybox
when 'lightbox'
'#fancybox-inner'
when 'close button'
'.document-viewer__tools__close'
...以及以下几个通用步骤定义:
# Generic click action
When(/^I click (?:on )?(?:the |a )'(.*?)'?$/) do |element|
find(selector_for(element)).click
end
这个问题,无论我采用的是非常普遍的概念,还是涉及上述或更多具体抽象概念,涉及一系列特征中重复出现的模式,这些可能会对其他深奥特征造成严重破坏,这些特征可能会有更具体的步骤来解析他们。 我见过的每个Cucumber示例都具有步骤定义文件,其文件名与特定功能文件具有程序关系,我的假设是,在这些情况下,只会调用该步骤定义文件来解析其相关功能中的场景:
+ features
| + step_definitions
| | + global_steps.rb
| | + modal_steps.rb
| | + login_steps.rb
| + modal.feature
| + login.feature
但情况并非如此 - 我正在努力让自己屈服于Cucumber尝试将每一步定义模式应用于每种场景的想法。 如果这些测试将有任何优点,它们将会变得更多,引入新的概念,并保持相关性,而不需要连续重写。 我希望能够限制我的步骤范围,以阻止它们干扰未写入的功能,但不知道如何。 想到以下概念性解决方案:
@tags
并仅为具有这些标签的场景调用步骤 我对Ruby不熟悉,Cucumber看起来非常薄,所以我一方面受到无限潜力的困扰,另一方面没有预先确定的实现。 有任何想法吗?
根据我的经验,过于普通的步骤导致极难维护自动化代码库。 尽可能在这里寻求平衡,只有你可以判断这个平衡点在哪里。 你不需要过分重复的步骤定义,但你不想要一个超级通用的恶梦来调试。
可以使用解决方法来获取标签列表,但请不要这样做。 这很粗俗,很奇怪,而不是打算如何使用黄瓜。
作为step_definitions的解决方法,您可以使用around步骤从场景中获取标签名称列表 -
Around do |scenario, block|
begin
@tag_names = scenario.tags.collect { |tag| tag.name }
block.call
ensure
$tags = nil
end
end
然后在step_definition主体中检查你想检测的标签是否包含在列表中 -
Given(/^I am testing a step with a "([^"]*)"$/) do |arg|
if @tag_names.include?('@a_tag')
puts 'Executing a step definition with tag - @a_tag'
else
puts 'Executing a step definition without tag - @a_tag'
end
end
此功能 -
Feature: Example feature
@a_tag
Scenario: Example scenario #1
Given I am testing a step with a "value"
Scenario: Example scenario #1
Given I am testing a step with a "value"
结果在这个输出 -
Feature: Example feature
@a_tag
Scenario: Example scenario #1 # features/example.feature:4
Given I am testing a step with a "value" # features/step_definitions/step_definitions.rb:10
Executing a step definition with tag - @a_tag
Scenario: Example scenario #1 # features/example.feature:7
Given I am testing a step with a "value" # features/step_definitions/step_definitions.rb:10
Executing a step definition without tag - @a_tag
2 scenarios (2 passed)
2 steps (2 passed)
0m0.004s
我再次认为使用这是一个非常糟糕的主意。 最好稍微重复步骤定义,易于跟踪和调试,然后有一个超级通用步骤定义来统一它们!
编辑 - 重新阅读您的问题和博客文章后,我不认为这真的回答你的问题。 但是,我相当肯定你正在尝试做一些非黄瓜的东西
链接地址: http://www.djcxy.com/p/73115.html上一篇: Limit cucumber steps or steps file to specified feature or tag