&tag(RSpec/モデルスペック); *目次 [#ebfb0b0a] #contents *関連ページ [#q5f8469d] -[[RSpec]] *参考情報 [#fa489a72] *概要 [#la2614ba] -モデルに対して行う最も単純なテスト *テンプレートスペックファイルの作成 [#d61d88b0] -spec/models/book_spec.rbを作成 #pre{{ require 'spec_helper' describe 'My behaviour' do it 'should do something' do true.should == false end end }} -以下で実行。失敗すれば上手く実行できている。 bundle exec rspec -修正する *基本スペックファイルの作成 [#v18067e0] -以下Bookモデルをテストするサンプル #pre{{ require 'spec_helper' describe Book do it '本のタイトルのテスト' do book = Book.new book.title = "本のタイトル" #もしくは expect(book.title).to eq '本のタイトル' end end }} -describeの引数は、文字列 or クラスなどを指定。 -実際の値.should == '予想された値' 的にチェックする。 *FactoryGirlを使う [#o7aeefb4] -テストデータとしてFactoryGirlを使う。 **factoryの生成 [#la07b11f] -spec/factories.rbや、spec/factories/book.rbなどに定義する。 #pre{{ FactoryGirl.define do factory :book do title "test book" end end }} -以下のように呼び出す #pre{{ describe Book do it '本のタイトルのテスト' do book = Book.new book.title = "本のタイトル" expect(book.title).to eq "本のタイトル" end it 'FactoryGirlのテスト' do t = FactoryGirl.build(:book) expect(t.title).to eq 'test book' end end }} **トラブルシューティング [#w7303254] ***NameError: uninitialized constant Tbook [#z0af57b5] -例えばfactoryとして以下のように定義し #pre{{ FactoryGirl.define do factory :book do title "test book" end factory :tbook do title "test book" end end }} -次のように使用するとエラーとなる。 t = FactoryGirl.build(:tbook) -これはbuildの引数(factoryの引数)が、テストデーターの識別の他、モデルクラスの名前の類推としても使われているため。モデルクラスとfactoryの名前が一致しない場合クラスを明示する #pre{{ factory :tbook, class: Book do title "test book" end }}