2

2つの異なる機能ファイルに2つのシナリオがありますが、どちらのシナリオも検索機能をテストしますが、ページの異なる部分にあります。私が持っているシナリオは次のようになります。

Scenario Outline: Search items from QuickSearch
Given that the following items
  | id | title       | 
  | 1  | Item1       | 
  | 2  | Item2       |
When I search for <criteria> in this search
Then I should get <result>
And I should not get <excluded>

Examples:
|criteria|result    | excluded  |
| 1      | 1        | 2         |
| 2      | 2        | 1         |

と:

Scenario Outline: Using a filter
Given that I have the following things:
 |id |name     |
 |1  | thing1  |
 |2  | thing2  |
When I use the <filter> filled with <criteria>
Then I should obtain these <results>
And I should not obtain these <exclusions>

Examples:
|filter     |criteria   |results    |exclusions |
|name       |thing      |1,2        |           |
|id         |1          |1          |2          |

2番目のシナリオでわかるように、2つのシナリオに別々のステップを記述するために、gettogetという単語を変更しました。2つの異なるステップが必要な唯一の理由は、2つの異なるシナリオのIDが異なる名前にマップされているためです(両方に同じものを使用することはできず、2番目のID 3から始めたくない)

だから私は両方のシナリオに共通のステップを考えています(少なくとも当時のステップに関しては)そして検証を行うためにハッシュマッピングIDと名前を一緒にしたいのですが、ハッシュはステップと呼ばれるシナリオ。

それで、キュウリとカピバラには、どのシナリオがステップと呼ばれるかを知る方法がありますか?

4

1 に答える 1

1

キュウリのステップからシナリオ名に直接アクセスする方法がわかりません。ただし、beforeフックで名前にアクセスし、それを変数に格納して、ステップで使用できるようにすることができます。

env.rbあなたの:にフックする前にこれを追加してください

Before do |scenario|
    case scenario
        when Cucumber::Ast::OutlineTable::ExampleRow
            @scenario_name = scenario.scenario_outline.name
        when Cucumber::Ast::Scenario
            @scenario_name = scenario.name
        else
            raise('Unhandled scenario class')
    end
end

編集:より新しいバージョンのCucumberを使用している場合は、代わりに試してください:

Before do |scenario|
  case scenario.source.last
  when Cucumber::Core::Ast::ExamplesTable::Row
    @scenario_name = scenario.scenario_outline.name
  when Cucumber::Core::Ast::Scenario
    @scenario_name = scenario.name
  else
    raise('Unhandled scenario class')
  end
end

ステップは、を使用してシナリオ名を確認できます@scenario_name。例:

Then /I should get (.*)/ do |result|
  if @scenario_name == 'Search items from QuickSearch'
    # Do scenario specific stuff
  elsif @scenario_name == 'Using a filter'
    # Do scenario specific stuff
  end

  # Do any scenario stuff
end
于 2012-07-13T17:19:14.480 に答える