shou2017.com
JP / EN

rails RSpecの準備

Fri Dec 1, 2017
Sat Aug 10, 2024

やっぱり、テストが重要だろうということでRSpecの本を読んだので、そのまとめ。セットアップはメモしとかないと忘れるのでメモ。

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

RSpecのセットアップ。

環境

  • rails 5.1.1
  • ruby 2.5.1
  • RSpec 3.6

セットアップ

以前はあれこれインストールしなくてはいけませんでしたが、RSpec 3.6からはかなりシンプルになりました。

rspec-railsとテストスイートの起動時間を速くするspring-commands-rspecをインストール。

Gemfile

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

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

Gemfileに追記後。

$ bundle install

binstubを作成

$ bundle exec spring binstub rspec

テストデータベース

テストデータベースがなければ以下の方法で追加する。

SQLite

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

MySQLやPostgreSQL

config/database.yml
test:
  <<: *default
  database: db/ project_test
  `project_test`の部分は自分のアプリケーションにあわせて適切に置き換える

次にrakeタスクを実行して接続可能なデータベースの作成。

$ bin/rails db:create:all

RSpecの設定

$ bin/rails g rspec:install
  Running via Spring preloader in process 2541
  create .rspec                   ← RSpec用の設定ファイル
  create spec                     ← スペックファイルを格納するディレクトリ
  create spec/spec_helper.rb      ← RSpec用の設定ファイル
  create spec/rails_helper.rb

Rspecの出力をデフォルトの形式からドキュメント形式へ変更(やらなくてもいい)

.rspec
--require spec_helper
--format documentation

確認

$ bin/rspec
Running via Spring preloader in process 56846
No examples found.
Finished in 0.00074 seconds (files took 0.144553 seconds to load)
0 examples, 0 failures

余計なものが作られないようにジェネレータを設定

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,
      view_specs: false,
      helper_specs: false,
      routing_specs: false,
      request_specs: false
    end
  end
end

モデルスペックの作成

$ bin/rails g rspec:model user

コントローラスペックの作成 コントローラはテストしないことが多い

$ bin/rails g rspec:controller users

アプリケーションにファクトリを追加する

$ bin/rails g factory_bot:model user

フィーチャスペックの作成

$ bin/rails g rspec:feature users

設定終わり。

Tags
RSpec
See Also