【初心者向け】RailsにRspecを導入してみた話
Rspecとは
Wikipediaから引用すると、Rspecとは
RSpec is a 'Domain Specific Language' (DSL) testing tool written in Ruby to test Ruby code.
自分なりに和訳してみると、
RSpecとはRubyによって書かれた、Rubyによるコードをテストするための'ドメイン固有言語'なテストツールである。
といった感じでしょうか。
つまりは、Ruby用のテストツールでして、Rubyベースのフレームワークのテストに使われています。
ちなみに @jnchito さんのこちらのスライドによると2015年時点では、利用者および情報量の観点ではRSpecが多数派のようです。
Gemfile
今回はこちらの公式ドキュメントを参考にRailsに導入していきます。
手順は簡単で、まずはGemfileを編集し、下記のコードを追加します。
group :development, :test do
gem 'rspec-rails', '~> 3.8'
end
その後、プロジェクトのディレクトリで
$ bundle install
$ rails generate rspec:install
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
と入力すれば完了です。
bundle install
でRSpecのダウンロードとインストールを行い、
rails generate rspec:install
でRSpecに必須な設定ファイルが作成されます。
これで準備が完了です。
あとはテストコードを作成し、コンソールにて
$ bundle exec rspec
と叩けば、テストが実行されます。
Springによる高速化
ここまでの内容でRSpecを用いてテストを実施することができますが、Springを用いることで、テストの所要時間を短縮することができます。
公式ドキュメントには
Spring is a Rails application preloader. It speeds up development by keeping your application running in the background so you don't need to boot it every time you run a test, rake task or migration.
とありまして、こちらも和訳してみると、
SpringはRailsアプリケーションにおけるプリローダーです。アプリケーション実行時にバックグラウンドで起動し続けることにより、テストやレイクタスク、マイグレーション毎にアプリケーションを起動させる必要がなくなるので、開発の速度があげることができます。
といった感じでしょうか。
ちなみにSpringはRailsのバージョン4.2からrails new
を実行時に自動でインストールされるようになっています。
というわけで、今回はRSpecを導入するにあたって、こちらを参考にSpringも利用することにしました。
こちらも利用は簡単です。
まずは、Gemfileに下記のように追加します。
group :development, :test do
gem 'rspec-rails', '~> 3.8'
gem 'spring-commands-rspec'
end
先ほど示したGemfileにgem 'spring-commands-rspec'
を追加しただけです。
追加したら、
$ bundle exec spring binstub rspec
とコンソールで入力し、スタブファイル(bin/rspec)を作成します。
これで準備は完了です。
あとは
$ bundle exec bin/rspec
と叩けばSpringとRSpecを用いたテストが実施されます。
実行時間の調査
準備ができたので、実際にテストコードの所要時間を比較してみます。
まず、テストコードを作成したいので、scaffoldを実行します。(scaffoldについても記事にしているので、参考にしてみてください。)
今回は下記のコマンドを実行しました。
$ rails generate scaffold Task title:string priority:integer
これによりRSpecのテストコードも自動で作成されますので、今回はこのテストコードを用います。
というわけでSpringを使った結果と使わなかった結果がこちらです。
$ bundle exec rspec
(省略)
Finished in 3.66 seconds (files took 21.22 seconds to load)
27 examples, 0 failures, 13 pending
$ bundle exec bin/rspec
(省略)
Finished in 3.59 seconds (files took 2.29 seconds to load)
27 examples, 0 failures, 13 pending
比べてみますとSpring使用時の方が読み込みにかかった時間が圧倒的に短いですし、テスト自体の実行時間もわずかに速いです。
今回の例ですと、テストケースが40ケースですが、テストの数がより増えてくるとより威力が発揮されるのではないかと思います。
まとめ
RSpecを導入する場合は
1. Gemのインストール
2. コマンドの実行
とかなり少ないステップで用いることができます。
また、Springを用いることで、テストを高速化することができます。
ちなみにRSpecを導入するタイミングによっては、Minitestによって作られている「test」ディレクトリが残ったままになってしまいますので、削除するのをお忘れなく。
最後までお読みいただきありがとうございました。
参考文献
RSpec基礎情報(Wikipedia)
https://en.wikipedia.org/wiki/RSpec
RSpecとMinitest、使うならどっち?
https://speakerdeck.com/jnchito/number-kanrk06
RSpec公式リポジトリ
https://github.com/rspec/rspec-rails
Spring公式リポジトリ
https://github.com/rails/spring
spring-commands-rspec公式リポジトリ
https://github.com/jonleighton/spring-commands-rspec
Author And Source
この問題について(【初心者向け】RailsにRspecを導入してみた話), 我々は、より多くの情報をここで見つけました https://qiita.com/rebi/items/ce50abc94b5edc4b6187著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .