第2回 RSpecを使ったテストコードを読もう
倉貫 義人
松村 章弘
TIS株式会社
SonicGarden
2008/11/26
優れたプログラマはコードを書くのと同じくらい、コードを読みこなせなくてはならない。優れたコードを読むことで、自身のスキルも上達するのだ(編集部)
- - PR -
第1回「コードリーディングを始めよう」では、Railsアプリケーションの基本であるCRUDのソースコードを読解しました。最低限の基本の動きということで、ディレクトリ構造の説明すら割愛していたので、今回はディレクトリ構造の解説から行います。その後、今回のメインテーマであるテストコードのコードリーディングに入っていきます。
ここで扱うテストコードというのは、Javaの世界でいうとJUnitを使ったテストコードと同じ粒度、つまり、単体テストに近い粒度のテストケースを動くプログラムで表したものになります。Javaの開発者にとってのJUnitやテスト駆動開発と同じくらい、Rubyの開発者にとって、RSpecとビヘイビア駆動開発は一般的なものになりつつあります。
本連載で題材として扱うオープンソース「SKIP」でも、テスティング環境としてRSpecを導入していますので、今回のコードリーディングのゴールは、RSpecを使ったテストコードの読み方の基本をマスターする、ということになります。
| 関連リンク: | |
| オープンソース「SKIP」 http://www.openskip.org/ |
|
ソースコードの準備
さて、前回から2カ月ほど経過しましたので、扱うソースコードのバージョンを変更します。第1回である前回は、1.0 rc1というリリース候補第1弾を使いましたが、今回は、その第2弾である1.0 rc2を使います。1.0 rc1からは細かな見た目の修正のほか、いくつかの機能追加などを行っています。詳しくは以下のURLを参照してください。
| 関連リンク: | |
| SKIP ver1.0 rc2のリリースノート http://www.openskip.org/2008/10/skipver10rc2.html |
|
1.0 rc2の目玉機能として追加したコメントのソートについてだけ、少し紹介しておきます。
SKIPでは、ユーザーの書いたブログの記事に対して、コメントを付けることができますが、その際に、ツリー形式でコメントを返すことができるようになっています。この機能のおかげで、誰のコメントへの返信か、すぐに分かるため大変便利に使えるのですが、そのソートができない点がいままでの不満でした。
これを解消するため、最近のコメントにアイコンを付けて、しかもソート機能を提供することで、さらにコメントが追いやすくなりました。
![]() |
| 図1 コメントのソート |
1.0 rc2のソースコードは、前回同様、Subversionのリポジトリからチェックアウトしておくことで、見やすくなります。
| 関連リンク: | |
| SKIP ver1.0 rc2 http://svn.openskip.org/skip/tags/1.0rc2/ |
|
SKIPのディレクトリ構造
初めに、前回は割愛したディレクトリ構造についての説明から行います。Rails用に作られたアプリケーションは、Railsに用意されたrailsコマンドを使っているはずなので、どれもほとんどが同じようなディレクトリ構造になります。SKIPの場合も同様です。以下のような構造になっています。
| app | アプリケーション用のソースコード(自分の作るファイルはこちら) |
| ├model | データベースを扱うソースコード |
| ├controller | 画面制御に関するソースコード |
| └view | 表示用のテンプレートファイル |
| config | 各種設定に関するファイル |
| db | データベース関連のファイル |
| └migrate | マイグレート(バージョンアップ時のDB構造変更)用のファイル |
| doc | ドキュメント |
| lib | 各種ライブラリファイル |
| log | 実行時のログファイル |
| public | JavaScriptや画像などの静的ファイル |
| script | サーバ起動スクリプトなど |
| spec | RSpecのテストコード |
| ├model | app/modelに対応するテストコード |
| ├controller | app/controllerに対応するテストコード |
| ├view | app/viewに対応するテストコード |
| └lib | libに対応するテストコード |
| stories | specのストーリーと呼ばれるテストコード |
| test | Test::Unitのテストコード |
| tmp | 一時的なファイル |
| vendor | プラグインやgemなどの外部から取り込んだファイル |
通常のRailsアプリケーションには存在しないspecというディレクトリがあるのが特徴です。このディレクトリこそが、今回のテーマであるRSpecのテストコードを配置するためのディレクトリになります。appという実際にアプリケーションとして動くソースコードと対応するようにサブディレクトリが用意されています。
また、storiesというディレクトリも、RSpecで使うストーリーと呼ばれるテストですが、今回はSKIPで利用していないこともあり、説明は割愛します。
1/4 |
| Index | |
| RSpecを使ったテストコードを読もう | |
| Page1 ソースコードの準備 SKIPのディレクトリ構造 |
|
| Page2 RSpecについて グループ機能のデータ構造 |
|
| Page3 モデルのスペックを読んでみよう |
|
| Page4 コントローラのスペックを読んでみよう |
|
| Railsコードリーディング 〜scaffoldのその先へ〜 |
| Ruby/Rails関連記事 |
| プログラミングは人生だ まつもと ゆきひろのコーディング天国 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる |
|
| 生産性を向上させるRuby向け統合開発環境カタログ Ruby on Rails 2.0も強力サポート 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる |
|
| かんたんAjax開発をするためのRailsの基礎知識 Ruby on RailsのRJSでかんたんAjax開発(前編) 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう |
|
| Praggerとnetpbmで作る画像→AA変換ツール Rubyを使って何か面白いものを作ってみよう! 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう |
|
| コードリーディングを始めよう Railsコードリーディング〜scaffoldのその先へ〜(1) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
TechTargetジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|


