こんにちは!kossyです!
本日のニュースでは無いですが、個人的に注目のニュースです。
jp.techcrunch.com
VoicyのIT公式ニュースでメドレー社の存在を知りました。
ヘルスケア業界に少しでも関わる自分にとっては、
技術をオープン化し、医療業界の無駄な部分を改善していきたいというビジョンには
共感を覚えます。
これからも動向を注視したいです。
さて、今回はRspecでバリデーションのテストコードを書いてみたので、
ブログに残してみたいと思います。
環境
Rails 5.1.6
Ruby 2.5.1
Rspec 3.8.0
MacOS Mojave
Userモデルのバリデーション
name, email, passwordカラムにバリデーションをかけています。
app/models/user.rb validates :name, presence: true, length: { maximum: 50 } validates :email, presence: true, uniqueness: true, format: { with: /\A[a-zA-Z0-9_\#!$%&`'*+\-{|}~^\/=?\.]+@[a-zA-Z0-9][a-zA-Z0-9\.-]+\z/ } validates :password, presence: true, length: { minimum: 8 }, format: { with: /\A[a-z0-9]+\z/, message: 'は半角英数字で入力してください' }
user_spec.rbの記述
require 'rails_helper' RSpec.describe User, type: :model do describe 'ユーザー作成のテスト' do context '名前・メールアドレス・パスワードがあれば有効な状態である場合' do it 'ユーザーは有効である' do user = User.new( name: 'test_user1', email: '12345678@gmail.com', password: 12345678, ) expect(user).to be_valid end end describe 'validates :name, presence: true' do context '名前がnilの場合' do it 'ユーザーは無効である' do user = User.new( name: nil, email: '12345678@gmail.com', password: 12345678, ) expect(user).not_to be_valid end end end describe 'validates :name, length: { maximum: 50 }' do context '名前が50文字以上の場合' do it 'ユーザーは無効である' do user = User.new( name: 'abcdefghijklmnopqestuvwxyzabcdefghijklmnopqestuvwxyz', email: '12345678@gmail.com', password: 12345678, ) expect(user).not_to be_valid end end end describe 'validates :email format' do context 'メールアドレスが有効であるかどうか' do it '@がないのでメールアドレスは無効である' do user = User.new( name: 'test_user1', email: '12345678gmail.com', password: 12345678, ) expect(user).not_to be_valid end it 'ひらがなが使用されているのでメールアドレスは無効である' do user = User.new( name: 'test_user1', email: 'あああああああ@gmail.com', password: 12345678, ) expect(user).not_to be_valid end it 'ひらがなが使用されているのでメールアドレスは無効である' do user = User.new( name: 'test_user1', email: 'あああああああ@gmail.com', password: 12345678, ) expect(user).not_to be_valid end it '@の位置が先頭なのでメールアドレスは無効である' do user = User.new( name: 'test_user1', email: '@12345678@gmail.com', password: 12345678, ) expect(user).not_to be_valid end end end describe ':password, length: { minimum: 8 }' do it 'パスワードが4文字なので無効である' do user = User.new( name: 'test_user1', email: '12345678@gmail.com', password: 1234, ) expect(user).not_to be_valid end end end end
RspecってどこまでDRYに書けばいいのかわからないっすね。。。
参考にさせていただいた記事
Read Everyday Rails - RSpecによるRailsテスト入門 | Leanpub