我正在玩黄瓜,并希望使用变换来提高可读性。目前我对以下步骤的行为感到困惑。
在一个场景中(a)我有一个步骤:
Given a player on 'B&O RR'
在另一种情况下(b)我有类似的步骤:
Given a player on 'Go'
我的步骤定义如下:
Given(/^a player on '(#{LOCATION})'$/) do |location|
# do something with location
end
转换定义如下:
LOCATION = Transform /^[A-Z].*$/ do |location|
raise "only once raised!"
# lookup location and return it - if working
end
我不明白为什么在(b)中没有执行变换。我在irb中尝试了regexp并且它匹配了两个步骤的字符串,但是当我运行包含这两个步骤的两个场景时,仅针对第一个(a)执行转换 - 证明了异常。
即使我单独运行第二个场景,也不会引发异常IMO意味着不会触发转换。这是怎么回事?
更新
我仍然不知道这里出了什么问题,但至少我知道如何解决这个问题:
LOCATION = Transform /^'([^']+)'$/ do |location|
# do stuff
end
恕我直言,这也是制定转型的更好方法。
答案 0 :(得分:0)
就我而言,最简单的方法是使用正则表达式:
LOCATION = Transform /^.*?$/ do |location|
# do smth
end
在你的情况下试试这个:
LOCATION = Transform /^[A-Z].*?$/ do |location|
# do smth
end
答案 1 :(得分:0)
以下对我有用:
features/temp/temp.feature
Feature: transform test
Scenario: a
Given a player on 'B&O RR'
Scenario: b
Given a player on 'Go'
features/temp/step_definitions/temp_steps.rb
Given(/^a player on '(#{LOCATION})'$/) do |arg|
puts arg
end
features/temp/support/transforms.rb
LOCATION = Transform /^[A-Z].*$/ do |arg|
arg
end
输出:
cucumber --no-profile features/temp/temp.feature
Disabling profiles...
Feature: transform test
Scenario: a # features/temp/temp.feature:3
Given a player on 'B&O RR' # features/temp/step_definition /temp_steps.rb:1
B&O RR
Scenario: b # features/temp/temp.feature:6
Given a player on 'Go' # features/temp/step_definition /temp_steps.rb:1
Go
2 scenarios (2 passed)
2 steps (2 passed)
0m0.030s
我同意您更新的转换正则表达式更可取,因为它声明“位置”是单引号之间的内容。
使用以下修改的步骤定义和转换,我得到与以前相同的输出:
features/temp/step_definitions/temp_steps.rb
Given(/^a player on (#{LOCATION})$/) do |arg|
puts arg
end
features/temp/support/transforms.rb
LOCATION = Transform /^'([^']+)'$/ do |arg|
arg
end