&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
}}




トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS