RSpecでのステップ定義
# spec/acceptance/steps/food_steps.rb
steps_for :food do
step ":name がある" do |name|
Food.create!(name: name)
end
end
Slide 9
Slide 9 text
Cucumber との比較
スコープ付きステップ
正規表現 → Placeholder
Slide 10
Slide 10 text
スコープ付きステップ
steps_for :food do
step ":name がある" do |name|
Food.create!(name: name)
end
end
steps_for :tool do
step ":name がある" do |name|
Tool.create!(name: name)
end
end
Placeholder
step ":food が :count ある/いる" do |food, count|
end
placeholder :count do
match /\d+(個|羽|丁)/ do |count|
count.to_i
end
match(/(.+)/) {|count| 10 }
end
Slide 13
Slide 13 text
なんか良さそう!!
Slide 14
Slide 14 text
プロジェクトで使ってみた
Rails
期間: 1 年間
ほぼ全画面を Turnip でテスト
Slide 15
Slide 15 text
LOC
全体 feature
s
steps model
spec
25,000 6,000 1,300 6,000
Slide 16
Slide 16 text
Turnip感想
RSpecに組み込めるのがよい
規模が大きくなるとつらい
Slide 17
Slide 17 text
つらみ
スコープが混ざる
Slide 18
Slide 18 text
スコープが混ざる
steps_for :food do
step ":name がある" do |name|
...
steps_for :tool do
step ":name がある" do |name|
...
# step を重複定義するのでエラー
@food @tool
シナリオ: ワインシリアルを作る
前提 "ワイン" がある
かつ "電動ドリル" がある
Slide 19
Slide 19 text
回避方法
steps_for :food do
step "食べ物 :name がある" do |name|
...
steps_for :tool do
step "道具 :name がある" do |name|
...
@food @tool
シナリオ: ワインシリアルを作る
前提 食べ物 "ワイン" がある
かつ 道具 "電動ドリル" がある
Slide 20
Slide 20 text
( ˘ω˘)
スコープとは何だったのか…
Slide 21
Slide 21 text
つらみ
Custom Step Placeholder でスコ
ープが使えない
placeholder :count do
match /\d+(個|羽|丁)/ do |count|
count.to_i
end
match(/(.+)/) {|count| 10 }
end
Step をまとめづらい
シナリオ:
もし "ワインシリアル" と表示すること
かつ "ヘッダー" に "ワインシリアル" と表示すること
step ':text と表示すること' do |text|
expect(page).to have_content(text)
end
step ':parent に :text と表示すること' do |parent, text|
within(parent) do
send ':text と表示すること', text
end
end
Slide 25
Slide 25 text
( ˘ω˘)
正規表現は善!!
Slide 26
Slide 26 text
まとめ
Turnip は小さいプロジェクトで
RSpec の拡張として使うには手
頃。
本格的にシナリオテストを書くな
ら Cucumber。
Powered by Rabbit 2.1.3 and COZMIXNG