&tag(RSpec/Rails3へ導入);
*目次 [#dfe1083a]
#contents
*関連ページ [#x20ce175]
-[[RSpec]]

*参考情報 [#ja202bd2]

*使用方法(Rails4編) [#n54af1c0]


**インストール [#b527657d]
*使用方法(Rails3編) [#t4d143c0]
-[[RSpecでRailsのテストをしてみるテスト。 | Ginpen.com:http://ginpen.com/2012/02/14/rspec-rails/]]
**インストール [#d3403589]
-Gemfileに追加
#pre{{
group :development, :test do
  gem "rspec-rails", "~>2.14.0"
  gem "factory_girl_rails", "~>4.2.1"
end

group :test do
  gem "faker", "~>1.1.2"
  gem "capybara", "~>2.1.0"
  gem "database_cleaner", "~>1.0.1"
  gem "launchy", "~>2.3.0"
  gem "selenium-webdriver", "~>2.39.0"
end
}}
 gem 'rspec-rails'
-bundle実行
 bundle install --path vendor/bundle
-インストール
 bundle install --path=vendor/bundle
-RSpec用の共通ファイルを用意
#pre{{
 bundle exec rails generate rspec:install
bundle exec rails g rspec:install
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
}}
-上のように、Gemfileでgroupを指定したときは、config/application.rbを編集する。これでモデルやコントローラーを作成したときに、*_spec.rbファイルを作る挙動を制御できる。

**テスト実行 [#had37ee3]
,bundle exec rake spec,spec以下の全てのspecを実行
,bundle exec rake spec,spec/modles以下の全てのspecを実行。
,bundle exec rake SPEC=spec/models/entry_spec.rb,個別のspecを実行
,bundle exec rspec spec/models/entry_spec.rb,個別のspecを実行rakeより速いかも。
**サンプル [#xfd6f6e2]
-[[Rails 3 でやってみた --『スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)』 - 牌語備忘録 - pygo:http://d.hatena.ne.jp/CortYuming/20120526/p3]]
-ブログサンプルを作ってみる
***railsプロジェクトを生成 [#uf9d9337]
-普通に生成。
***インストール [#p25596a7]
-Gemfileに追加し、bundle実行
***モデルの生成 [#rda8095a]
-bundleで実行する
#pre{{
    config.generators do |g|
      g.test_framework :rspec,
        fixtures: true,
        view_specs: false,
        helper_specs: false,
        routing_specs: false,
        controller_specs: true,
        request_specs: false
      g.fixture_replacement :factory_girl, dir: "spec/factories"
 $ bundle exec rails generate model Blog name:string
 invoke  active_record
      create    db/migrate/20130419052115_create_blogs.rb
      create    app/models/blog.rb
      invoke    rspec
      create      spec/models/blog_spec.rb
}}
***マイグレーション実行 [#z94b4d6b]
-null不可に変更。
#pre{{
class CreateBlogs < ActiveRecord::Migration
  def change
    create_table :blogs do |t|
      t.string :name, :null => false
      t.timestamps
    end
  end
end
}}
-マイグレーションを実行する。
 $ bundle exec rake db:migrate
***フィクスチャ作成 [#h186b8ed]
-spec/fixtures/blogs.ymlを作る
#pre{{
one:
  id: 1
  name: その1
two:
  id: 2
  name: その2
}}
***spec作成 [#n7c8f91a]
-spec/models.blog_spec.rb
#pre{{
# -*- coding: utf-8 -*-
require 'spec_helper'

※注意事項)
-ちなみに以下のようにgroup指定して、rspec-railsを使う場合、普通にscaffoldするとspecが作られない。
#pre{{
group :development, :test do
  gem "rspec-rails"
describe Blog, "#name が設定されていない場合:" do
  before(:each) do
    @blog = Blog.new
  end
  it "バリデーションに失敗すること" do
    @blog.should_not be_valid
  end
end

}}
-これはbundle execの環境がproductionであるため。group指定を以下のようにあらためるか(意味ないけど…)
***spec実行 [#jbb0152d]
-rake spec SPEC=spec/models/blog_spec.rbを実行する 。この段階では失敗。
 bundle exec rake pec SPEC=spec/models/blog_spec.rb
-次のようにvalidateすれば成功するようになる
#pre{{
group :production, :development, :test do
  gem "rspec-rails"
class Blog < ActiveRecord::Base
  attr_accessible :name

  validates  :name, presence:true
end
}}
-RAILS_ENVを指定する。
 RAILS_ENV=development bundle exec rails g
-でも間違えないように。config/application.rbをいじったほうが簡単。

**ひな形の生成 [#ac1c3a2e]
***単体のcontroller specのひな形を生成 [#n90e4d4a]
-以下のコマンドで生成できる。けど空のファイルになる。
  bundle exec rails g rspec:controller softwares
-scaffoldと同時につくると中身充実のcontroller用rspecが作られる。後から単体でつくる方法は不明(見本をみながらコピーするしかないかも)。
 bundle exec rails g scaffold item


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS