【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∀`o)
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∀`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 :)