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

執筆者:

関連記事

Rails4.0で添付したpdfファイルの中身を全文検索の対象にする〜carrierwave、pdftotext、pg_bigm

By: Uncalno Tekno – CC BY 2.0 環境 Ubuntu server 12.04 sunspot_cellにしようとおもってたけど、ライブラリとか勉強することが多く …

Rails3.2でコードのお作法を指摘してもらう~Rails Best Practices

コードのお作法を自動でチェックしてくれるrails_best_practiceを導入した

あとは、Railsのルートで[crayon- …

no image

Rubyでローカルで使うgemをつくる~bundler

  目次1 bundlerのインストール2 bundle gem ファイル名3 gemspec4 lib5 パッケージ化6 インストール7 使い方 bundlerのインストール gemパッケ …

ElasticSearchをRubyから使う~elasticsearch-ruby

By: Harry Rose – CC BY 2.0 目次1 gem elasticsearch-ruby2 環境3 インスタンス作成4 メソッド一覧5 情報取得6 ドキュメントの作成7 …

Rails3.2のproduction環境で動画再生~flowplayer+carrierwave+nginx+unicorn

  By: Creative Tools – CC BY 2.0 目次1 前提2 unicornの設定3 nginxのインストール4 nginxの設定5 アセット関係6  ストリ …