質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

5379閲覧

[rails]Rspecでのpassword一致の検証の書き方

yoshiky

総合スコア105

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/11/20 08:40

お世話になります。
RailsでSorceryを使ったユーザ認証を実装し、そのSpecを書こうとしているのですが、
Modelの検証の部分でつまづいております。

環境

  • ruby(ruby 2.3.1p112) / rails (Rails 5.0.0.1)
  • rspec-rails (3.5.2)

ruby

1 2# app/models/user.rb 3class User < ApplicationRecord 4 authenticates_with_sorcery! 5 6 validates :password, length: {minimum: 3 }, if: -> { new_record? || changes[:crypted_password]} 7 validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password]} 8 validates :password_confirmation, presence: true, if: -> { new_record? || changes[:crypted_password]} 9 10 validates :email, uniqueness: true 11end 12 13# app/controllers/user_controller.rb 14〜略〜 15def create 16 @user = User.new(user_params) 17 if @user.save 18 redirect_to @user, notice: 'User was successfully created !' 19 end 20end 21 22private 23def user_params 24 params.require(:user).permit(:email, :password, :password_confirmation) 25end 26 27 28# spec/models/user_spec.rb 29〜略〜 30context 'when match password and password_confirmation' do 31 it 'is valid' do 32 user1 = User.new(email: 'test@test.com', password: 'password', password_confirmation: 'password') 33 puts user1 #<= #<User id: nil, email: "test@test.com", crypted_password: nil, salt: nil, created_at: nil, updated_at: nil> となる 34 user1.valid? 35 expect(user1.errors[:password]).to include 'must be same' 36 end 37end 38

やりたいことは、「passwordとpassword_confirmationが同じ場合、検証エラーにならない(またはその逆)」の確認です。
上記のコードで登録はできるのですが、Rspec上だとpasswordとpassword_confirmationというパラメタではないので、どうやって検証すべきか分からずにおります。。

Sorceryを使ったRspecでのテストはいくつか記事が見つかったのですが、
モデルをテストしているものがなかったり、公式のこちらにもControllerの例しかありませんでした。

この場合、どう書けば良いのでしょうか。
アドバイスいただけると助かります。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決したので、メモしておきます。

ruby

1context 'パスワードが一致する場合' do 2 user = User.new(email: 'test@test.com', password: 'hogehoge', password_confirmation: 'hogehoge') 3 user.valid? 4 it 'エラーにならないこと' do 5 expect(user.errors[:password_confirmation]).not_to be_present 6 end 7end 8context 'パスワードが一致しない場合' do 9 user = User.new(email: 'test@test.com', password: 'hogehoge', password_confirmation: 'hoge') 10 user.valid? 11 it 'エラーになること' do 12 expect(user.errors[:password_confirmation]).to be_present 13 end 14end

これでよしとする、というかこれ以上やりようがないですね。。

投稿2016/11/20 15:12

yoshiky

総合スコア105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問