#はじめに
Rspecを導入し、テストコードを書いてみようと思います。
コマンドはdocker環境のコマンドを使う。
#Gemの導入
group :development, :test do
gem 'rspec-rails'
gem 'factory_bot_rails'
gem 'faker', "~> 2.8"
end
docker-compose run web bundle install
docker-compose build
インストール完了。
#Rspecの設定
docker-compose run webrails g rspec:install
上記コマンドを行うと、下記ファイルが生成される。
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
.rspc
--format documentation
#コード作成
spec/models/user_spec.rb
require 'rails_helper'
describe User do
describe '#create' do
it "usernameとemail,passwordとpassword_comnfirmationが存在すれば登録できること" do
user = build(:user)
expect(user).to be_valid
end
it "usernameがない場合は登録できないこと" do
user = build(:user, username: nil)
user.valid?
expect(user.errors[:username]).to include("can't be blank")
end
it "emailがない場合は登録できないこと" do
user = build(:user, email: nil)
user.valid?
expect(user.errors[:email]).to include("can't be blank")
end
it "passwordがない場合は登録できないこと" do
user = build(:user, password: nil)
user.valid?
expect(user.errors[:password]).to include("can't be blank")
end
it "passwordが存在してもpassword_confirmationがない場合は登録できないこと" do
user = build(:user, password_confirmation: "")
user.valid?
expect(user.errors[:password_confirmation]).to include("doesn't match Password")
end
it "重複したemailがある場合は登録できないこと" do
user = create(:user)
another_user = build(:user, email: user.email)
another_user.valid?
expect(another_user.errors[:email]).to include("has already been taken")
end
it "passwordが6文字以上であれば登録できること" do
user = build(:user, password: "000000", password_confirmation: "000000")
expect(user).to be_valid
end
it "passwordが5文字以下であれば登録できないこと" do
user = build(:user, password: "00000", password_confirmation: "00000")
user.valid?
expect(user.errors[:password]).to include("is too short (minimum is 6 characters)")
end:grin:
end
end
spec/factories/users.rb
FactoryBot.define do
factory :user do
username {"aaa"}
password {"000000"}
password_confirmation {"000000"}
sequence(:email) {Faker::Internet.email}
end
end
docker-compose run web bundle exec rspec
8 examples, 0 failures
となれば、テストはうまく通過している。
#おわりに
今回はRspecを使ったテストの入りを行いました。
今後、コントローラーのテストも行っていきます。
最後まで読んでいただきありがとうございます