なべしす

独立系SI企業から完全異業種のベンチャー企業に転職、社内のITインフラを整えるべく颯爽と登場した自称天才プログラマー俺のハートフルブログ

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