ruby on railsではじめるrspecテスト

21
【CoEdo.rb】Ruby / Ruby on Railsビギナーズ勉強会 Ruby on RailsではじめるRspecテスト 2015.04.19

Upload: kanako-kobayashi

Post on 17-Jul-2015

321 views

Category:

Engineering


1 download

TRANSCRIPT

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

【CoEdo.rb】Ruby / Ruby on Railsビギナーズ勉強会

Ruby on RailsではじめるRspecテスト2015.04.19

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

Self-Intoroduction

• WordPressもくもく倶楽部@Co-Edoも来てください。

• Swiftビギナーズ倶楽部@Co-Edoも開催しています( ▽ ` )ノ

• Rubyで開発をしたい、アプリケーションエンジニア(LAMP/Java/Oracle)

http://wp-moku.doorkeeper.jp/

一緒に勉強しましょう( ▽ ` )ノ 勉強会やってます!

http://swift-beginners.doorkeeper.jp/

徳島県出身です

(o∀`o)

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

手動でチマチマと 同じテストを繰り返すのは もう絶対イヤ!!

写真素材ぱくたそ http://www.pakutaso.com

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

Railsはテストを 書きやすい仕組みが あるらしいけど どうやってやるの?

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

1)Railsでのテストって?

Today's Agenda

2)テストの環境について理解する!

3)とにかく、テストを書いてみよう!

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

1)Railsでのテストって?

1-1)デフォルトの、Test::Unitを利用する。 Railsに標準で組み込まれているテストフレームワーク

1-2)自分の好きなテストフレームワークを導入する。 今回は、Rspecを導入してみます。

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

今日試してみること

Rspcを 導入する

テスト データを 用意する (必要であれば)

失敗する テストを 書く

実装を 書く

繰り返して実装を完成させる

テストが 成功する ことを確認

TDD:テスト駆動開発 (Test Driven Development)

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

2)テストの環境について理解する!

config/database.yml

開発環境 :developmentテスト環境:test本番環境 :production

分離したテストデータの設定と、そのデータの取り扱いが 可能になるため、データを好きに扱うことができる。

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

3)とにかく、テストを書いてみよう!

ruby 2.2.1 rails 4.2.1 RSpec 3.0.0

今 回 の 環 境

https://github.com/mustacheyork/coedorb-rspec-vol4ソース置いてます(o∀`o)

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

1)Railsプロジェクトを作成 rails new coedorb-vol4

2)サーバーを起動して、アクセス確認 rails s http://localhost/

Railsプロジェクトの作成から

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

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を導入

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

1)下記のコマンドを実行 rake db:test:prepare

テスト環境のデータベースを構築

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

1)scaffoldを利用して、管理画面を生成 rails generate scaffold user name:string address:string

2)生成されたモデルを、開発用データベースに反映 rake db:migrate

3)追加したマイグレーションを、テスト用データベースにも反映 rake db:migrate RAILS_ENV=test

テスト対象の管理画面を作成

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

1)生成された、spec/models/user_spec.rbを確認してみる require 'rails_helper'

RSpec.describe User, :type => :model do pending "add some examples to (or delete) #{__FILE__}" end

テストを確認

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

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」、保留であれば「*」を出力します。 各サンプルの詳細なレポート、最後に実行時間と全サンプル数、失敗したサンプル数、保留したサンプル数も出力します。

早速テストを実行

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

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

テストを書く

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

モデルのバリデーションを実行していないので失敗します。 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

テストが失敗することを確認

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

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

テストが成功する実装を書く

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

次のステップ

・コントローラーのテスト

・テストデータを利用する。

 factory_girlを導入

・ブラウザの操作を実装する。

 Capybaraを導入

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

参考情報

・RSpec初心者向けの資料まとめ[Ruby] http://morizyun.github.io/blog/rspec-beginner-bdd-tdd-test-first/

・Everyday Rails - RSpecによるRailsテスト入門 https://leanpub.com/everydayrailsrspec-jp

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

Let's study together!

Thank you :)