SlideShare a Scribd company logo
1 of 19
Rails on Rspec
plactice
実運用から考察するRailsのRspec運用方法
目録
・1クラス1Specファイルは冗長だ!
・APIのテスト
・FactoryGirl
・カバレッジ
・便利なGemを使おう
・その他
目録
・1クラス1Specファイルは冗長だ!
・APIのテスト
・FactoryGirl
・カバレッジ
・便利なGemを使おう
・その他
Rails on Rspec
plactice
1クラス1Specファイルという
分割は冗長だ!
RailsのGenerator機能に則って開発
していると、Specファイルは自然
と1クラス1Specという単位で分
割されていきます。
Rails on Rspec
plactice
1クラス1Specファイルという
分割は冗長だ!
例えば、モデルクラスに書くテス
トを考えた時にどのようなテスト
が考えられるでしょうか?
・DBのスキーマ定義
・モデル間の関連
・プロパティ、Enum
・バリデーション
・Scope
・クラスメソッド
・インスタンスメソッド
etc...
うわっ、テストの種類
こんなに多いの!
Rails on Rspec
plactice
1クラス1Specファイルという
分割は冗長だ!
以下の方針で分割しましょう
・DB構造、プロパティ、Enum、バリデーション
・Scopeごとに1ファイル
・クラスメソッドごとに1ファイル
・インスタンスメソッドごとに1ファイル
ディレクトリ構造を分けてSpecファイルを配置す
ることで、確認したいテストを探しやすくなるほか、
1テストあたりのコード量が減り、また、そのファ
イルにはそのテストに必要な情報しか記述しないの
で読みてにも優しい。
Rails on Rspec
plactice
1クラス1Specファイルという
分割は冗長だ!
Modelクラスのテストに限定して考
えましたが、考え方はControllerク
ラス、Helperモジュールなどでも
考え方は同じです。
メソッド単位でテストファイルを
作成していくと見通しの良いテス
トファイルが作成出来ます。
目録
・1クラス1Specファイルは冗長だ!
・APIのテスト
・FactoryGirl
・カバレッジ
・便利なGemを使おう
・その他
Rails on Rspec
plactice
APIのテスト
APIのテストにはRailsが定義するデ
フォルトは存在しません。
またGrapeのようなDSLを利用する
とメソッド単位という分割方法は
使えなくなります。
Rails on Rspec
plactice
APIのテスト
APIについては、1エンドポイント
毎に1つのテストファイルを作成
していくのがよいと考えます。
この時、テストファイルの命名に
は
api_[request_method]_[resource]_[ac
tion]_specとすると、ファイル名か
らの検索性能が向上するはずです。
ファイルの命名について、パスパラメタのことは特に考えていません。
この辺りはRailsのURLHelperの考え方に沿って、
複数取得する場合は、resourceを複数系に、1件に絞って取得する場合は、
単数形にするようにすれば良いと考えています。
目録
・1クラス1Specファイルは冗長だ!
・APIのテスト
・FactoryGirl
・カバレッジ
・便利なGemを使おう
・その他
Rails on Rspec
plactice
FactoryGirl
バリデーションの通る1つのモデ
ル定義を作成しておく。
テストドメイン毎の定義は行わな
い、テストドメインのデータは1
つ定義したFactoryをロードして、
テストファイルの中でデータを変
更して作成するようにする。
こうすることで、テストとデータ
の関連がすぐに把握出来るように
なる。
目録
・1クラス1Specファイルは冗長だ!
・APIのテスト
・FactoryGirl
・カバレッジ
・便利なGemを使おう
・その他
Rails on Rspec
plactice
カバレッジ
SimpleCovを利用していることが前提の話です。
テスト環境のeager_loadを有効にし、
spec_helperまたはrails_helper
(.rspecで指定している方)の一番
先頭でカバレッジ取得のための設
定を読み込むようにする。
こうすることで、Railsがオートロ
ードする全てのコードがカバレッ
ジ取得対象になる。
この方法だと、範囲を限定してテストを実行するときでも、
大くのファイルを読み込んでしまうので、カバレッジを集計
して可視化するCI環境のみで有効にするのが良い。
目録
・1クラス1Specファイルは冗長だ!
・APIのテスト
・FactoryGirl
・カバレッジ
・便利なGemを使おう
・その他
Rails on Rspec
plactice
便利なGemを利用する
・shoulda_matcher
・rspec_its
・grape-entity-matchers
(grapeを利用している場合)
・rspec-request-describer
・json-spec
【よくある質問】
Q:このGem、もう全然メンテされてないんですけど…
A:エンジニアなら、フォークするなりプルリクだして直せ!
程度にもよりますが、多少のバグならそれほど時間を欠けずに修正できるはずです
目録
・1クラス1Specファイルは冗長だ!
・APIのテスト
・FactoryGirl
・カバレッジ
・便利なGemを使おう
・その他
Rails on Rspec
plactice
他にもテストで考えることは
色々ある
・テスタブルな処理の書き方
・テストの実行時間の問題
・featureテストは開発するエンジ
ニアが書くものではないのでは?
・fixtureの取り扱い
etc...
調べれば何かしら出てくると思うので詳しくは話しません。
良きテストライフを!

More Related Content

Similar to Rails on rspec plactice

ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​YujiSoftware
 
ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)KnowledgeGraph
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionGoh Matsumoto
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselKei Nakazawa
 
JavaWorld Day 2009 Scala
JavaWorld Day 2009 ScalaJavaWorld Day 2009 Scala
JavaWorld Day 2009 ScalaTomoharu ASAMI
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 
Do you like scala
Do you like scalaDo you like scala
Do you like scalaYuto Suzuki
 
ライトニングトーク資料 OSC東京2017秋
ライトニングトーク資料 OSC東京2017秋ライトニングトーク資料 OSC東京2017秋
ライトニングトーク資料 OSC東京2017秋Shinji Tanimoto
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
RubyとDSLと メタプログラミングと
RubyとDSLと メタプログラミングとRubyとDSLと メタプログラミングと
RubyとDSLと メタプログラミングとxiidec
 
こわくないScala
こわくないScalaこわくないScala
こわくないScalaFScoward
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発についてTomoya Kawanishi
 
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システムSIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システムyayamamo @ DBCLS Kashiwanoha
 
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FASTA HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FASTKenichi Tachibana
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionSatomi Tsujita
 

Similar to Rails on rspec plactice (20)

What is JSpec
What is JSpecWhat is JSpec
What is JSpec
 
ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​ラムダのコンパイル結果を5分で説明するよ​
ラムダのコンパイル結果を5分で説明するよ​
 
ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
 
JavaWorld Day 2009 Scala
JavaWorld Day 2009 ScalaJavaWorld Day 2009 Scala
JavaWorld Day 2009 Scala
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
Do you like scala
Do you like scalaDo you like scala
Do you like scala
 
ライトニングトーク資料 OSC東京2017秋
ライトニングトーク資料 OSC東京2017秋ライトニングトーク資料 OSC東京2017秋
ライトニングトーク資料 OSC東京2017秋
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
RubyとDSLと メタプログラミングと
RubyとDSLと メタプログラミングとRubyとDSLと メタプログラミングと
RubyとDSLと メタプログラミングと
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発について
 
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システムSIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
 
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FASTA HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
read parse-css
read parse-cssread parse-css
read parse-css
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
 

Rails on rspec plactice