21
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

RSpec + Spork + FactoryGirl + Guard によるテスト環境構築

アプリケーションを作成。

rails new test_env
cd test_env

-

Gemfileに以下を追記。

Gemfile
group :test do
  gem 'spork'
  gem 'guard-spork'
end

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

-

インストール。

bundle install

-

.rspecspec/spec_helper.rbを生成する。

rails generate rspec:install

-

Sporkを使用するように、.rspecに以下を追記。

--drb

-

動作確認用に、scaffoldでUserを生成。

rails generate scaffold user name:string age:integer

-

マイグレーション。

rake db:migrate

-

以下のようにして、spec/spec_helper.rbに、spork用のエントリを追加。

spork --bootstrap

-

FactoryGirlの変更を反映させるため、spec/spec_helper.rbに以下のように追記。

spec/spec_helper.rb
Spork.each_run do
  # This code will be run each time you run your specs.
  FactoryGirl.reload        ### added
end

-

Guardfileを生成。

guard init spork
guard init rspec

-

spec/factories/以下の変更に対して対応するテストが行われるように、Guardfileに以下のように追記。

Guardfile
require 'active_support/inflector'    ### added

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

(中略)

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }

  watch(%r{^spec/factories/(.+)\.rb$}) do |m|        ### added
    %W[                                              ### added
      spec/models/#{m[1].singularize}_spec.rb        ### added
      spec/controllers/#{m[1]}_controller_spec.rb    ### aaded
    ]                                                ### added
  end                                               ### added
end

-

テスト用DBの準備。

rake db:test:prepare

-
以上で、コードの変更に対して即座にテストが走る環境になる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
21
Help us understand the problem. What are the problem?