Rails – RSpecの設定と使い方

RSpecのRailsプロジェクトへのインストール

Gemに以下の記述を追加します。

group :development, :test do
  gem "rspec-rails"
  gem "factory_girl_rails"
end

 

RSpecの初期化

以下のコマンドを実行し、RSpecのテストファイルを格納するディレクトリ等を作成します。

rails g rspec:install

 

スペックファイルの生成

例えばUserというモデルのスペックファイルを生成する場合は以下のコマンドを実行する。

rails g rspec:model user

 

RSpecによるテストの実行

array_spec.rbというスペックファイルのテストを実行する場合には以下のコマンドする。

rspec spec/model/user_spec.rb

 

データ投入時にモデルのバリデーションを無視する方法

FactoryGirl.define do
  factory :item_a, :class => Item do
    company_id 1

    # save時にvalidationをスキップする
    to_create do |instance|
      instance.save validate: false
    end 
  end
end

 

 

 

ハマりどころ

FactoryGirlファイルの場所の明示が必要

テストデータを作成するためにFactoryGirlを組み合わせて使ったのですが、ちゃんとFactoryGirlファイルを準備しているのに、その定義内容ではなくNULLがDBに投入されようとしてエラーになってしまいました。

fixtureの代替としてFactoryGirlを使用することを設定に明記していないのが原因でした。以下の一文をconfig/application.rbに追記すればエラーが発生しなくなりました。

config.generators.fixture_replacement :factory_girl, dir: 'spec/factories'

 

FactroyGirlファイルの内容を変えたときはspringの再起動が必要

springを使ってrspecテストを高速化している場合、FactoryGirlファイルの内容はrspec初回起動時のものが保持され続けるので注意が必要です。FactoryGridファイルを変更したら以下のコマンドを実行して一度springを止め、再び再起動(spring rspec)しましょう。

spring stop

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です