LoginSignup
0
0

More than 3 years have passed since last update.

(備忘録)Everyday Rails 第2章「RSpecのセットアップ」

Posted at

「Everyday Rails - RSpecによるRailsテスト入門」

Railsを使用したアプリケーションを作成したものの、テストの記述が全然分からない、という状態になったので、RSpecの勉強をできる教材を探していたところ、なんとプロを目指す人のためのRuby入門 (チェリー本)の著者が翻訳を手がけた本を発見しました。
こちらのサイトから購入できます!
販売方法はなんと、購入金額を自由に設定できるという、画期的なシステムでした(最低購入価格は$19からですが)。
先日、なんとか1周は終わらせたのですが、全然理解できていない部分が多いので、復習がてらアウトプットしていきたいと思います!
image.png

第1章 「イントロダクション」

第1章はイントロダクションということで、この本のアウトラインや著者の想いなどが書かれています。

著者の思い

その中で、著者の考える基本的な信条というものがあり、

・テストは信頼できるものであること
・テストは簡単に書けること
・テストは簡単に理解できること(今日も将来も)

と書かれており、また

・とはいえ結局、一番大事なことはテストが存在することです。信頼性が高く、理解しやすいテストが書いてあることが大事な出発点になります。

とありました。
テストはどちらかと言うと、とっつきにくいイメージがあったので、学習することから逃げていた節もあったのですが、心を入れ替えてしっかりと取り入れていきたいと思います!

サンプルコードについて

GitHubからサンプルコードを入手できます。

第2章 「RSpecのセットアップ」

早速、本に従って進めていきたいところですが、いきなり、「テストスイート」という聞いたこともない単語に出くわしました。
スルーしてもいいのですが、最初が肝心なので、調べてみました。
テストスイートとは、

ソフトウェアテストの目的や対象ごとに複数のテストケースをまとめたもの。自動化テストにおいては、テストの実行単位となる。
 ソフトウェアテスト(動的テスト)の最小単位はテストケースといえるが、実際にテスト作業ではいくつものテストケースを組み合わせることによって不具合をあぶり出したり、確率的に十分なテストを行ったという結論を出したりする。このようなテスト目的やテスト対象に応じて、多数のテストケースを束ねたものをテストスイートという。

らしいです。
僕は知りませんでしたので、勉強になりました。

Gemfileのインストール

まずはRSpecをインストールする必要があります。

Gemfile
group :development, :test do
  gem 'rspec-rails', '~> 3.6.0'
end

開発環境とテスト環境の両方で、rspec-railsを読み込みますが、本番環境では読み込みません。

テストデータベースの作成

config/database.yml
test:
  <<: *default
  database: db/test.sqlite3

接続可能なデータベースの作成を行います。
$ bin/rails db:create:all

RSpecの設定

続いて、RSpecのインストールを行います。
$ bin/rails generate rspec:install

インストール時に作成された.rspecファイルを以下のように変更すると、RSpecの出力がドキュメント形式になるので、非常に読みやすくなります。

.rspec
--require spec_helper
--format documentation

rspec binstubで起動時間の短縮を図る

Gemfile
group :development do
  gem 'spring-commands-rspec'
end

bundle install後、新しいbinstubを作成します。
$ bundle exec spring binstub rspec

RSpecを実行してみる

まだテストファイルは一個も作成していませんが、RSpecのインストールを確認する上でも、以下のコードで一度RSpecを起動してみるのがいいと思います。
$ bin/rspec

ジェネレータの設定

今後、アプリを作成していく中で、$ rails gコマンドを使用してコードを追加する際に、RSpec用のテストファイルも同時作成できるように設定を変更します。

config/application.rb
require_relative 'boot'
require 'rails/all'

Bundler.require(*Rails.groups)

module Projects
  class Application < Rails::Application
    config.load_defaults 5.1

    config.generators do |g|
      g.test_framework :rspec,
        fixtures: false,
        view_specs: false,
        helper_specs: false,
        routing_specs: false
    end
  end
end

fixtures: false テストデータベースにレコードを作成するファイルの作成をスキップ
view_specs: false ビュースペックを作成しないことを指定
helper_specs: false ヘルパーファイル用のスペックを作成しないことを指定
routing_specs: false config/routes.rb用のスペックファイルの作成を省略

まとめ

これでRSpecのテスト実行するためのセットアップが整ったことになります。
色々と設定があって、大変ですね。
本によると、既存のtestディレクトリがあった場合は、rails testコマンドでテストの有無を確認し、必要ならRSpecへの移行を検討するべき、とのことでした。
あくまで準備段階が終わっただけですが、一苦労でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0