【CoEdo.rb】Ruby / Ruby on Railsビギナーズ勉強会
Ruby on RailsではじめるRspecテスト
2015.04.19
Self-Intoroduction
• WordPressもくもく倶楽部@Co-Edoも来てください。
• Swiftビギナーズ倶楽部@Co-Edoも開催しています( ́ ▽ ` )ノ
• Rubyで開発をしたい、アプリケーションエンジニア(LAMP/Java/Oracle)
http://wp-moku.doorkeeper.jp/
一緒に勉強しましょう( ́ ▽ ` )ノ
勉強会やってます!
http://swift-beginners.doorkeeper.jp/
徳島県出身です
(ó `o)
手動でチマチマと
同じテストを繰り返すのは
もう絶対イヤ!!
写真素材ぱくたそ
http://www.pakutaso.com
Railsはテストを
書きやすい仕組みが
あるらしいけど
どうやってやるの?
1)Railsでのテストって?
Today's Agenda
2)テストの環境について理解する!
3)とにかく、テストを書いてみよう!
1)Railsでのテストって?
1­1)デフォルトの、Test::Unitを利用する。
Railsに標準で組み込まれているテストフレームワーク
1­2)自分の好きなテストフレームワークを導入する。
今回は、Rspecを導入してみます。
今日試してみること
Rspcを
導入する
テスト
データを
用意する
(必要であれば)
失敗する
テストを
書く
実装を
書く
繰り返して実装を完成させる
テストが
成功する
ことを確認
TDD:テスト駆動開発
(Test Driven Development)
2)テストの環境について理解する!
config/database.yml
開発環境 :development
テスト環境:test
本番環境 :production
分離したテストデータの設定と、そのデータの取り扱いが
可能になるため、データを好きに扱うことができる。
3)とにかく、テストを書いてみよう!
ruby 2.2.1
rails 4.2.1
RSpec 3.0.0
今 回 の 環 境
https://github.com/mustacheyork/coedorb-rspec-vol4
ソース置いてます(ó `o)
1)Railsプロジェクトを作成
rails new coedorb-vol4
2)サーバーを起動して、アクセス確認
rails s
http://localhost/
Railsプロジェクトの作成から
1)Gemfileに追記
group :development, :test do
gem 'rspec-rails', ' > 3.0.0'
end
bundle install
rails g rspec:install
2)下記のファイルが生成されることを確認
$ rails g rspec:install
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
3)「.rspec」を編集
大量の警告を出す「--warning」オプションをひとまず削除しておきます。
「--color」オプションはRSpec実行時のログを色付けを行ってくれます。
「--require」オプションはRSpec実行前に特定のファイルを読み込んでくれます。
Rspecを導入
1)下記のコマンドを実行
rake db:test:prepare
テスト環境のデータベースを構築
1)scaffoldを利用して、管理画面を生成
rails generate scaffold user name:string address:string
2)生成されたモデルを、開発用データベースに反映
rake db:migrate
3)追加したマイグレーションを、テスト用データベースにも反映
rake db:migrate RAILS_ENV=test
テスト対象の管理画面を作成
1)生成された、spec/models/user_spec.rbを確認してみる
require 'rails_helper'
RSpec.describe User, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end
テストを確認
1)早速テストを走らせてみる
$ bundle exec rspec spec/models/user_spec.rb
*
Pending:
User add some examples to (or delete) /Users/kanako/Documents/01_TickleCode/01_doc/02_rails4.2.1/
coedorb-vol4/spec/models/user_spec.rb
# Not yet implemented
# ./spec/models/user_spec.rb:4
Finished in 0.00056 seconds (files took 7.44 seconds to load)
1 example, 0 failures, 1 pending
RSpecでは定義されている振る舞いの一つ一つを「サンプル(example)」と呼びます。
RSpecの出力は、サンプルが成功であれば「.」、失敗であれば「F」、保留であれば「*」を出力します。
各サンプルの詳細なレポート、最後に実行時間と全サンプル数、失敗したサンプル数、保留したサンプル数も出力します。
早速テストを実行
1)spec/models/user_spec.rbを編集する
require 'rails_helper'
RSpec.describe User, :type => :model do
it "isn't valid without name" do
user = User.new
user.name = nil
expect(user).not_to be_valid
end
end
テストを書く
モデルのバリデーションを実行していないので失敗します。
1)テストを実行
$ bundle exec rspec spec/models/user_spec.rb
F
Failures:
1) User isn't valid without name
Failure/Error: expect(user).not_to be_valid
expected #<User id: nil, name: nil, address: nil, created_at: nil, updated_at: nil> not to be valid
# ./spec/models/user_spec.rb:7:in `block (2 levels) in <top (required)>'
Finished in 0.02384 seconds (files took 9.52 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/models/user_spec.rb:4 # User isn't valid without name
テストが失敗することを確認
1)モデルにバリデーションを追加する。app/models/user.rb
class User < ActiveRecord::Base
validates :name, presence: true
end
2)テストが成功することを確認する
$ bundle exec rspec spec/models/user_spec.rb
.
Finished in 0.1483 seconds (files took 8.71 seconds to load)
1 example, 0 failures
テストが成功する実装を書く
次のステップ
・コントローラーのテスト
・テストデータを利用する。
 factory_girlを導入
・ブラウザの操作を実装する。
 Capybaraを導入
参考情報
・RSpec初心者向けの資料まとめ[Ruby]
http://morizyun.github.io/blog/rspec-beginner-bdd-tdd-test-first/
・Everyday Rails - RSpecによるRailsテスト入門
https://leanpub.com/everydayrailsrspec-jp
Let's study together!
Thank you :)

Ruby on Railsではじめるrspecテスト