質問
以下のような形の実現方法はありますか。
features
|-- gamen1.feature
|-- gamen2.feature
|-- step_definitons
| `-- gamen1_steps.rb
| `-- gamen2_steps.rb
| `-- global_steps.rb
`-- support
`-- env.rbってなってる時、gamen1.feature 実行中は gamen1_steps.rb のステップだけ呼ばれて、
共通のステップは globaL_steps.rb に書く、みたいな。
現状
# gamen1.feature
Feature: 画面A
Scenario: 一覧画面から詳細画面に遷移する
Given 画面Aにアクセスする
When 一覧から"hoge"リンクをクリックする
Then "hoge"の詳細画面が表示される# gamen2.feature
Feature: 画面B
Scenario: 一覧画面から詳細画面に遷移する
Given 画面Bにアクセスする
When 一覧から"fuga"リンクをクリックする
Then "fuga"の詳細画面が表示されるという二つの feature があって、それぞれが持つ When Step の定義が下記の通りだとします。
When /^一覧から"([^\"]*)"リンクをクリックする$/ do |name|
find(table.xpath(name)).click # ここらへんは雰囲気
endこの時、画面Aと画面Bで一覧テーブルに対する xpath が違う場合の対処方法を悩んでいます。
※ もちろんテーブルだけじゃなくてその他もろもろ
だめっぽい時は
いくつか対処案を考えてはいます。というかそうすべきものかもしれません。
対処案1
素直に同じにする。対象テーブル全て table#list にするとか
対処案2
タグ付けする。
@gamen1
Scenario: 一覧画面から詳細画面に遷移する
Given 画面Aにアクセスする
When 一覧から"hoge"リンクをクリックする
Then "hoge"の詳細画面が表示される
@gamen2
Scenario: 一覧画面から詳細画面に遷移する
Given 画面Bにアクセスする
When 一覧から"fuga"リンクをクリックする
Then "fuga"の詳細画面が表示されるとかして
Before '@gamen1' do
World(Project::Gamen1)
end
Before '@gamen2' do
World(Project::Gamen2)
endみたいな。あとはそれぞれで table.xpath の処理を変えるとか。
対処案3
ステップ名に画面名を入れる
When /^画面Aの一覧から"([^\"]*)"リンクをクリックする$/ do |name|
# ...
end
When /^画面Bの一覧から"([^\"]*)"リンクをクリックする$/ do |name|
# ...
end対処案2,3共に画面が増えれば増えるほどカオス
素直に対処案1 かな・・・
