🍣

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

2023/09/13に公開

はじめに

弊社プロジェクトでRSpecを導入することになったので、
そのノウハウをとりあえず共有。
百番煎じだろうと役に立つ可能性は...あります

必須設定

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

Gemの追加

Gemfile
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に以下を追記するとドキュメントっぽくなる

.rspec
--format documentation

[f:id:oredeki:20170614233255p:plain]

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

/config/application.rb
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

Discussion