RSpecをRailsプロジェクトに導入する

はじめに

弊社プロジェクトでRSpecを導入することになったので、
そのノウハウをとりあえず共有。

必須設定

基本的にGemを追加するだけで使用可能

Gemの追加

group :development, :test do
gem "rspec-rails"
gem "factory_girl_rails"
gem "guard-rspec"
gem "spring-commands-rspec"
end
group :test do
gem "faker"
gem "database_cleaner"
gem "launchy"
gem "selenium-webdriver"
gem "shoulda-matchers"
end

インストー

$bundle exec rails generate rspec:install
以下が追加される
create  .rspec
create  spec
create  spec/spec_helper.rb

これだけで使える状態まで持っていける。

便利な設定

テスト結果をドキュメントっぽくする

デフォルトのテスト結果はこんな感じ
f:id:oredeki:20170614233231p:plain

.rspecに以下を追記するとドキュメントっぽくなる

--format documentation

f:id:oredeki:20170614233255p:plain

不要なファイルを生成しないための設定

config.generators do |g|
g.test_framework :rspec,
fixtures: true,
view_specs: false,
helper_specs: false,
routing_specs: false,
controller_specs: true,
request_specs: false
g.fixture_replacement :factory_girl, dir: "spec/factories"
end

各ジェネレート

RSpecをインストールしている場合、railsのジェネレートコマンドを使うとそれに準じたテストファイルも作成される。

Model

$rails g model User name:string
以下が追加される
Running via Spring preloader in process 34465
invoke  active_record
create    db/migrate/20170612075328_create_users.rb
create    app/models/user.rb
invoke    rspec
create      spec/models/user_spec.rb
invoke      factory_girl
create        spec/factories/users.rb

Contloller

$rails g controller UserList index
以下が追加される
Running via Spring preloader in process 61960
create  app/controllers/user_list_controller.rb
route  get 'user_list/index'
invoke  erb
create    app/views/user_list
create    app/views/user_list/index.html.erb
invoke  rspec
create    spec/controllers/user_list_controller_spec.rb
invoke  helper
create    app/helpers/user_list_helper.rb
invoke    rspec
invoke  assets
invoke    coffee
create      app/assets/javascripts/user_list.coffee
invoke    scss
create      app/assets/stylesheets/user_list.scss