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

執筆者:

関連記事

no image

Rubyからdocxを生成する

    前提 Rubyでdocxをいろいろ分析してみた 変数の仕様~正規表現 いろいろなパターンで試してみた 例えば、こんな文 [crayon-58dc8f835c2fc82434 …

Rails3.2でHTML5で取得した位置情報をMongoDBに保存してGoogleMapsでみる~mongoid、gmaps4rails

前提 Rails3.2でhtml5で取得した位置情報をAjaxで住所表示する~geocoder 目次1 Mongoid2 スケルトンを作る3 Gmap4railsのインストール4 とりあえず地図を表示 …

RailsでECサイト構築5 プロモーションを試す~spree

  spreeをインストールするとspree-promoというエクステンションが含まれている これを使うといろいろな販売企画をすることができる 管理画面から適当に作成してみる 今回は特定の商 …

backbone-relationalで関連するコレクションをRails3.2のAPIに投稿〜accepts_nested_attributes_for

By: Mike Baird – CC BY 2.0   backbonerelational.org/ Backbone-relationalを使って関連するコレクションをまと …

SASS/SCSS+COMPASS+zurui-sass-railsで角丸・グラデ・半透明・テキストシャドウ・ボックスシャドウ

By: Ole Houen – CC BY 2.0 sass-lang.com/ Sassの基礎 (全15回) ドットインストール ネストを覚えた人のためのSassの便利な使い方 comp …