奇怪的转换或正则表达式问题

时间:2013-11-16 21:52:17

标签: cucumber

我正在玩黄瓜,并希望使用变换来提高可读性。目前我对以下步骤的行为感到困惑。

在一个场景中(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

恕我直言,这也是制定转型的更好方法。

2 个答案:

答案 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