LoginSignup
0
0

More than 3 years have passed since last update.

[Rails]Rspecを使ったテストコード

Posted at

はじめに

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を使ったテストの入りを行いました。
今後、コントローラーのテストも行っていきます。
最後まで読んでいただきありがとうございます:grin:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0