草野球の出欠確認Webアプリを作ろう! part.5


これから作っていく簡単な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の真似事ができるようになる(つもりでいますが、挫折する可能性も...)。

次回の記事>>