はじめに
弊社プロジェクトで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
これだけで使える状態まで持っていける。
便利な設定
テスト結果をドキュメントっぽくする
デフォルトのテスト結果はこんな感じ
[foredeki:20170614233231p:plain]
.rspecに以下を追記するとドキュメントっぽくなる
.rspec
--format documentation
[foredeki: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