[環境]
CentOS6.2
Rails 3.2.2
Ruby 1.9.3-p125
(1)テスト対象のModel
簡易blog(食べたもの記録)アプリの記事本体部分を想定。
Modelの名前はDiningとします。
app_root/db/migrate/[date]_dinings.rbより抜粋すると
class CreateDinings < ActiveRecord::Migration def change create_table :dinings do |t| t.date :date #日付 t.string :time #「朝」「昼」「夜」が入る t.string :menu #「食べたもの」 t.integer :price #「お値段」 t.string :shop #「店」 t.string :place #「店の場所」 t.integer :evaluetion #1~5の5段階評価 t.string :impression #感想 t.string :ctype # 写真が指定されている時写真のcontent_type t.binary :photo #写真 t.timestamps end end end写真データを直接DBに格納する荒っぽいモデルですが利用者が1人ということでご勘弁を。 このモデルに対して
1.必須パラメータが空の時バリデーションではじかれること
2.必須で無いパラメータが空の時バリデーションではじかれないこと
3.長さの最大長があるものに関しては境界値動作が正しいこと
を確認するためのコードを書いていきます。
(2)テストデータの準備
app_root/spec/fixtures/dinings.ymlに以下の内容のテストデータを準備します。
#coding:utf-8 valid: date: 2012-03-22 time: "朝" menu: "おうどん" price: 290 shop : "おにやんま" place: "五反田" evaluetion: 4 impression: "おいしい" ctype : "image/jpeg" photo:ここではバリデーションに引っかからないようなデータを用意しておきます。
(3)テストコードの実装
app_root/spec/models/dinings_spec.rb
にテストコードをバリバリ書いていきます。
#coding:utf-8 require 'spec_helper' describe "Dining バリデーションテスト" do fixtures :dinings #テストデータを設定 before(:each) do #全テスト実行前の共通動作 @dining = dinings(:valid) #dinings.ymlの (valid:)で指定されているデータを設定 end it "dateが空の時:エラーが発生すること" do @dining.date = "" @dining.should_not be_valid #be_validで無いことを確認する endさてこれでテストを実行すると(sporkはたちあげておいて下さい)
$ rspec --drb --drb spec/models/dining_spec.rbバリデーションコード書いてないので失敗(日付が空だけどbe_valid)します。 4.テストを通すコードの実装
というわけでテストを通すコードを書いていきます。
app_root/app/model/dining.rb
#conding:utf-8 class Dining < ActiveRecord::Base validates :date, :presence => true #dateは空を許さない endこれでテストを再度実行すると無事テストが成功。
というようなサイクルで
テストコード→実装→テスト通った嬉しいを繰り返していくと
段々緑色が見える度に脳内麻薬が出てコード書くのにboostがかかるのでおすすめです。
あと赤色が緑にならないと気持ち悪くて寝られなくなる。
次回は写真アップロードテストのやり方あたりをメモしておきます。
0 件のコメント:
コメントを投稿