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

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

Jul 17, 2015

Download

Engineering

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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 :)