こんにちは、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ファイルを書いてもらうことも夢ではないかもしれません(現実にはなかなかないでしょうけれど)。