Slide 1

Slide 1 text

Turnip Turnip @kbaba1001 Powered by Rabbit 2.1.3 and COZMIXNG

Slide 2

Slide 2 text

自己紹介 kbaba1001 Ruby on Rails 永和システムマネジメント

Slide 3

Slide 3 text

kbaba1001食堂 ?

Slide 4

Slide 4 text

今日の話

Slide 5

Slide 5 text

Turnip とは Acceptance Test Framework @jnicklas (capybara、xpath)

Slide 6

Slide 6 text

特徴 Gherkin でシナリオテストを書く RSpec の拡張として動く Spinach より機能が多い

Slide 7

Slide 7 text

Gherkin フィーチャ: kbaba1001として料理を作る シナリオ: ワインシリアルを作る 前提 "ワイン" がある かつ "シリアル" がある かつ 冷蔵庫が空である もし kbaba1001が空腹である ならば "ワインシリアル" を作ること

Slide 8

Slide 8 text

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

Slide 11

Slide 11 text

スコープ付きステップ @food シナリオ: ワインシリアルを作る 前提 "ワイン" がある かつ "シリアル" がある @tool シナリオ: ショートケーキを作る 前提 "電動ドリル" がある かつ "手動泡立て機" がある

Slide 12

Slide 12 text

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

Slide 22

Slide 22 text

長い… placeholder :page do helper = Rails.application.routes.url_helpers match(/トップページ/) { helper.root_path } match(/ユーザーマイページ/) { helper.authenticated_root_path } match(/管理者マイページ/) { helper.admin_authenticated_root_path } match(/プロフィール登録ページ/) { helper.profile_path } # 中略... match(/(.+)/) {|page| page } end

Slide 23

Slide 23 text

( ˘ω˘) スコープとは何だったのか…

Slide 24

Slide 24 text

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