これから作っていく簡単なWebアプリの作成メモ(自分の備忘)です。
自分用なのであまり凝りすぎないように書いていきたい。
##今回やったこと
###Rspecの導入
ようやく重い腰を上げてRspecを導入する。
以下の記事を参考にした(基本的に記事の通りにした)。
RailsアプリへのRspecとFactory_botの導入手順
Gemfile
group :development, :test do
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] (既存のgem)
gem "rspec-rails"
gem "factory_bot_rails"
end
$ bundle
$ bundle exec rails generate rspec:install
config/application.rb
config.generators do |g|
g.test_framework :rspec,
view_specs: false,
helper_specs: false,
routing_specs: false
end
spec/rails_helper.rb
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
(略)
end
spec/rails_helper.rb
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
↑rails_helper.rb
の記述は私の環境ではコメントアウトを解除すればよかった(最初に生成した時からコメントアウトで書いてあった)。
###Rspecの動作確認
まず参考記事の内容をなぞって、FactoryBotに新規フォルダ・ファイルを作成して定義をする。
$ mkdir ./spec/factories/
$ touch ./spec/factories/users.rb
spec/factories/users.rb
FactoryBot.define do
factory :user do
sequence(:name) { |n| "TEST_NAME#{n}"}
sequence(:email) { |n| "TEST#{n}@example.com"}
sequence(:password) { |n| "TESTpassword"}
sequence(:password_confirmation) { |n| "TESTpassword"}
end
end
FactoryBotのほうを整えたら、テストコードを作成する。
$ mkdir ./spec/models/
$ touch ./spec/models/users_spec.rb
/spec/models/users_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do
before do
@user = build(:user)
end
describe 'バリデーション' do
it 'nameが空だとNG' do
@user.name = ''
expect(@user.valid?).to eq(false)
end
it 'emailが空だとNG' do
@user.email = ''
expect(@user.valid?).to eq(false)
end
it 'password_digestがfalseだとNG' do
@user.password_confirmation = ''
expect(@user.valid?).to eq(false)
end
it 'nameとemailどちらも値が設定されていれば、OK' do
expect(@user.valid?).to eq(true)
end
end
end
テストコードを実行する。
$ bundle exec rspec spec/models/users_spec.rb
きちんと動作したのでハッピー。
実行結果
....
Finished in 0.07136 seconds (files took 1.74 seconds to load)
4 examples, 0 failures
短いけど今回はここまで。
次回からようやくTDDの真似事ができるようになる(つもりでいますが、挫折する可能性も...)。