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 を使うための環境・準備
-, ,

執筆者:

関連記事

Rails3.2のアプリをデプロイ~apache+passenger+postgresql

  環境 ubuntu server 12.04 目次1 postgresql2 apache+passenger3 デプロイ準備 postgresql インストール 参照 Ubuntu s …

Railsでhtmlファイルやリンク先のスクリーンショットを撮影~IMGKit&wkhtmltoimage

  github.com/csquared/IMGKit 目次1 環境2 wkhtmltoimageのインストール3 imgkitのインストール4 試す5 日本語フォント 環境 ubuntu …

Rails4でのJSONテンプレート~jbuilder+rabl+ruby

By: Wonderlane – CC BY 2.0[/caption] Rails4からJSONも標準でjbuilderを使ってテンプレートから出力できるようになった けど、しっくり来な …

Rails3.2で位置情報を日本語表示の住所に変換する~geocoder

ついにブログ記事が100件突破した! そのうちメニュー項目などをわかりやすく構成し直したいと思う いまはRailsのプログラムが楽しくて仕方ない時期なので色々と試して書き溜めたいと思う EverNot …

sunspot_railsで全文検索

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