[RSpec][Turnip] 一般的に使えるTurnipステップ集

こんにちは、hachi8833です。最近ますます好きになってきたTurnipを使いやすくするため、たいていの受け入れテストで使い回せるTurnipステップをテンプレとしてまとめてみました。ある程度ですがCapybaraのカンニングペーパーにもなります。

## -*- encoding: utf-8 -*- 
## 一般的に利用できるTurnipステップ

## テスト用ステップ

    #表示テキスト存在確認
step %(:textと表示されている) do |text|
  expect(page).to have_content(text)
end

    #表示テキスト不在確認
step %(:textと表示されていない) do |text|
  expect(page).not_to have_content(text)
end

## 操作用ステップ

    #ページ移動
step %(:pageページにアクセスする) do |page|
  visit "http://localhost/#{page}"
end

    #リンクをクリック (textはリンク文字列かid)
    #同じ名前のリンクが複数ある場合には文字列は指定できない
step %(:textリンクをクリックする) do |text|
  click_link text
end

    #同じ名前のリンクが複数ある場合に順序も指定
step %(:n番目の:textリンクをクリックする) do |n, text|
  n = n.to_i - 1
  all(:link_or_button, text)[n].click
end

    #ボタンをクリック (textはボタン文字列かid)
    #同じ名前のボタンが複数ある場合には文字列は指定できない
step %(:textボタンをクリックする) do |text|
  click_button text
end

    # フィールドに文字列を入力する |fieldはモデル[属性]の形式
step %(:fieldに:valueを設定する) do |field, value|
  fill_in field, with: value
end

    # ドロップダウンボックスを選択 (textはボタン文字列かid)
    #同じ名前の項目が複数ある場合には文字列は指定できない
step %(:choiceを選択する) do |choice|
  choose choice
end

    # チェックボックスを選択  (choiceは文字列かid)
    # 同じ名前の項目が複数ある場合には文字列は指定できない
step %(:choiceをチェックする) do |choice|
  check choice
end

    # チェックボックスを選択解除  (choiceは文字列かid)
    # 同じ名前の項目が複数ある場合には文字列は指定できない
step %(:choiceのチェックを外す) do |choice|
  uncheck choice
end

## デバッグ用

    # pryを呼ぶ (pry, pry-rails, pry-doc がインストールされていること)
step %(pryを呼び出す) do
  binding.pry
  puts ''
end

    # その時点の静的なwebページを表示する
step %(表示する) do
  save_and_open_page
end

    # ペンディング用
step %(:reasonという理由でペンディング) do |reason|
  pending reason
end

こういうのをこしらえておけば、Turnipのfeatureファイルも以下のような感じでざくざく書けます。

    前提 "[参加者一覧]"リンクをクリックする
    ならば "参加者一覧"と表示されている
    かつ "[参加者編集]"リンクをクリックする
    かつ "[追加]"リンクをクリックする
    ならば "1件追加"と表示されている
    かつ "sankasha[name]"に"参加者001"を設定する
    かつ "sankasha[yomi]"に"さんかしゃよみ"を設定する
    かつ "sankasha[zip_code]"に"239-0803"を設定する
    かつ "sankasha[address]"に"住所1"を設定する
    かつ "sankasha[sub_address]"に"住所2"を設定する
    かつ "sankasha[tel]"に"03-671-2500"を設定する
    かつ "sankasha[fax]"に"03-671-2501"を設定する
    かつ "sankasha[eigyou]"に"営業太郎"を設定する
    かつ "sankasha[email]"に"eigyou@eigyou.com"を設定する
    かつ "追加"ボタンをクリックする
    ならば "参加者001を作成しました"と表示されている

認証やfactoryの準備などはもちろん別途行う必要がありますが、画面ナビゲーションレベルについては大抵間に合うのではないかと思います。皆様も適宜これをカスタマイズしてお使いいただければと思います。Githubにも置きましたので、今後はこちらを更新します。

ここまで落とし込めれば、お客さんにfeatureファイルを書いてもらうことも夢ではないかもしれません(現実にはなかなかないでしょうけれど)。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833

コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。
これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。
かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。
実は最近Go言語が好き。
仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ