Railsで使えるGem RubyOnRails を使うための環境・準備

Rails3.2.8でテーブル並び替えのテストを作る~cucumberと正規表現

投稿日:

前提 Railsのテーブル並び替えを実装する

Rails3.2.8で自動テスト環境を整える〜cucumber+spork+guard

作戦(ストラテジー)

ストラテジーというほどおおげさなものではないが、並び替えのテストをするには指定した単語が出てくる順番が重要になる

イメージとしてはこのような形でfeatureファイル上のテーブル同士を比較する形にしたい

 

has_table?というそれっぽいメソッドがあるので試してみたがうまくいかない

調べてみると「なんでうまくいかないのかよくわからないけど、その機能は削除するから」みたいな扱いらしい

そこで代わりに提示されていた方法がfindで<tr>要素を見つけてきてつなげるという方法だった

この方法もなぜかFactoryGirlで指定していない”MyString”という言葉が出てきてうまくいかなかった

(結局、後にdb/test.sqlite3に最初から入っていたレコードと気づいてdelete * from messages;で削除した)

そこで、第3案として出現する単語を”.*?”でつないで正規表現で抽出する作戦にした

has_content?で正規表現が使えるようになったのはどうも数カ月前にコミットしたようでgithubの最新のバージョン2.0.0ベータのcapybaraに取り入れられているようだ

Gemfileにgitファイルを指定してbundleでインストールした(詳細は前回の記事を書き換えた)

have_contentの正規表現を試す

次のような簡単なscaffoldで

stepファイルは、Rails3.2.8で自動テスト環境を整える〜cucumber+spork+guardのものを使えば最後の2つ以外は通るはず

featureから取得するtableデータは二次元配列のようなので上のメーリスの提示を参考にeachでまわして、正規表現の最小単位”.*?”でつなげる

このステップはスペースなどの特殊文字がパースされないのでデータに特殊文字を含んでいるとうまく機能しない

このステップを加えると最初のfeatureファイルはテストを通過した

並び替えの機能テストを作る

Railsのテーブル並び替えを実装するの記事では「やること」と「仕組み」を考えたが「やること」に書いたようなことがcucumber向きで、「仕組み」に書いたようなことがrspec向きっぽい気がする

「やること」は次のとおりだった

  •  テーブルのカラム名をクリックすると上矢印が現れて昇順に並び替える
  • もう一度同じカラム名をクリックすると下矢印に変わって降順に並び替える
  • 違うカラム名をクリックすると上矢印が現れて昇順に並び替える、前の矢印は消える

長くなるので矢印の件は省略すると、次のようなfeatureファイルができた

ダミーデータが整数1桁でないのは整数1桁だけだとぜんぶテストを通ってしまったため

 

↑こういう画面はguardではでてこないので、コンソールからcucumebrを実行する

cucumberのまとめ

いいところ

  1. 人間に必要な機能を中心に考えるのはいいこと
    rspecだと気持ちがクラス中心、メソッド中心になるけど、そもそもそのメソッド必要かとか、いろいろ先のことを考えつつクラスを作るけど、機能中心だと最小限の機能を実装して取りあえず動かす、あとはリファクタリングでって気持ちになりやすいかもしれない
  2. プログラムを知らない人もわかりやすい
    前にも書いたけど「Head first java」で言っていた、人間のわかる言葉でのコード、テストコード、本番のコードっていう順番に書くのはちょっといい習慣かもしれない

わるいところ

  1. rspecに比べるとcucumberは情報が少ない 和書もないに等しい
  2. 仕様も変わっているようで古い情報だと動かないことがある
  3. 想定しない振る舞いにバグがあるかもしれない rspecだと一応coverageが目安になるからどちらかというと隙がなくなりそうな気がする

追記 ページネーションと組み合わせた時、ページネーションのリンクをクリックしてもdirectionが反転してしまうバグを発見しました

そうなるよなあ

-Railsで使えるGem, RubyOnRails を使うための環境・準備
-, ,

執筆者:

関連記事

Rubyでdocxをいろいろ分析してみた

  目次1 解凍~minizip2 ファイルを開く~File.open3 全ファイルを解凍せずにzip内の必要なファイルだけを開く~zipruby4 置換~gsub5 xmlの操作~noko …

Rails5.1でフォームをウィザード化〜wicked

By: Doll Joints – CC BY 2.0 目次1 gem wicked2 ウィザード用のコントローラーを作成する3 ルーティングの設定4 既存のコントローラーのcreateメ …

no image

Railsで動画ファイルを管理する~CarrierWave Flowplayer

  参考 Ruby on Rails 3.2でファイルアップロード〜CarrierWave & RMagick Rails3で動画配信を試用~flowplayer 環境 Ubuntu …

sunspot_railsで全文検索

sunpotはsolrというJava製の全文検索サーバをrubyから使えるGem sunspot_rails はsunspotにマージされてました 参考 railscasts.com/episodes

Rails4とD3.jsでローソク足グラフを描く〜d3.js編

前回 Rails4とD3.jsでローソク足グラフを描く〜Rails準備編 目次1 jsonデータ2 y_scaleを考える3 始値と終値から箱をつくる4 高値と安値でひげをつくる5 y_axisをつけ …