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

執筆者:

関連記事

ThoughtBotの『Backbone.js on Rails』の目次と見出しをななめ読み

By: John – CC BY 2.0 learn.thoughtbot.com/products/1-backbone-js-on-rails 買いました 電子書籍で137ページに$4 …

全文検索エンジンGroongaをRubyから利用するライブラリのチュートリアルをやってみた〜rroonga

By: Kevin Jarrett – CC BY 2.0 目次1 Groonga2 Groongaのインストール3 rroongaのインストール4 チュートリアルの開始5 データベースの …

simple_formからdatepickerを使うには~ui_datepicker-rails3

  github.com/kristianmandrup/ui_datepicker-rails3 目次1 Gemfile2 js3 css4 initializer5  使う6 できた G …

Rails4.1に対応したRefinery CMS 3.0を試してみた

By: Alexis Madrigal – CC BY 2.0 目次1 Refinery CMS2 Gemfile3 generate4 configファイル5 起動6 管理画面7 トラブ …

Rails3.2でhtml5で取得した位置情報をAjaxで住所表示する~geocoder

    HTML5ではブラウザからユーザーのPCの位置情報を取得することができるGeoLocation APIというものがある (もちろんデフォルトではユーザーに確認をする設定にな …