ruby script/generate rspec_model モデル名 名前:型 ... rake db:migrate rake db:test:prepare$RAILS_APP/spec/models/モデル名_spec.rb が作られる。
通常の script/generate model と使い方は大体一緒らしい。
rake db:migrate をしたあとはテスト環境のデータベースに適応するために
rake db:test:prepare をしないといけない。
テストしたい項目のデータベースの要素を列挙できる。
$RAILS_APP/spec/fixtures/モデル名の複数形.yml にある。
データ名はテスト時にどのデータを取得するかのシンボルになる。
フィクスチャをテスト時に読み込むときは describe ブロックの中で呼び出せばいい
すべてのフィクスチャを読み込みたい場合は
$RAILS_APP/spec/fixtures/モデル名の複数形.yml にある。
データ名1: id: 1 要素名: 内容 データ名2: id: 2 要素名: 内容 . . .
データ名はテスト時にどのデータを取得するかのシンボルになる。
フィクスチャをテスト時に読み込むときは describe ブロックの中で呼び出せばいい
describe モデルクラス do fixtures :フィクスチャファイルの名前のシンボル end
すべてのフィクスチャを読み込みたい場合は
fixtures :all
ここまでの手順を適当な例を使ってまとめてみる。
railsは2.3.10をrspecはgemに入っている1.3.1を使うことを前提とする。
フィクスチャファイルをvimで開いた後
次に spec/models/hoge_spec.rb を開いて
specを実行してテストが成功すればおk。
railsは2.3.10をrspecはgemに入っている1.3.1を使うことを前提とする。
rails _2.3.10_ hoge cd hoge ruby script/generate rspec ruby script/generate rspec_model hoge text:text rake db:migrate rake db:test:prepare vim spec/fixtures/hoges.yaml
フィクスチャファイルをvimで開いた後
hoge: id: 1 text: ほげほげ moke: id: 2 text: もけもけ
次に spec/models/hoge_spec.rb を開いて
require 'spec_helper' describe Hoge, "のフィクスチャを設定した場合:" do fixtures :hoges it "フィクスチャのデータは読み込まれている" do hoges(:moke).text.should == "もけもけ" end end
specを実行してテストが成功すればおk。
spec -cfs spec/models/hoge_spec.rb
コレクションオブジェクトが幾つ持っているかを示す。
例えばあるモデルのhogeのname要素のエラーの数を調べたい場合は
have(数字).(コレクションオブジェクト(ArrayとかHash))
例えばあるモデルのhogeのname要素のエラーの数を調べたい場合は
hoge.should have(1).errors_on(:name)これはモデルHogeのname要素はエラー数を1個持っていればテスト成功という意味になる。
データが変更できているかのチェックに使う。
change(チェックする変数, そのメソッド) のような形で使う。
メソッドチェインをつけることができる
change(チェックする変数, そのメソッド) のような形で使う。
メソッドチェインをつけることができる
なし | とりあえず変更したら成功 |
by(value) | 差分がvalueだと成功 |
from(old).to(new) | oldからnewになっていれば成功 |
- 例
describe "change マッチャテスト" do before do @array = [] end it "メソッドチェインなし" do # とりあえず変更したら成功 lambda { @array << 0 }.should change(@array, :length) end it "by" do # 3増えてたら成功 lambda { @array.push(1,2,3) }.should change(@array, :length).by(3) end it "from(old).to(new)" do # 0から2担って入れたら成功 lambda { @array.push(1,2) }.should change(@array, :length).from(0).to(2) # from と to はto(new).from(old)のように逆でもOK end end
基本はこのページを参考にしてくだしあ。
適当ですいません。以下は補足。
適当ですいません。以下は補足。
be_valid | バリデーションが設定されているかどうか |
have_at_least(n).items | have(n).items とほぼ一緒。itemsが最低n個持っているという意味 |
have_at_most(n).items | 。要素が最大n個持っているという意味 |
最新コメント