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

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

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

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

Ruby on Rails

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

Q&A

1回答

3440閲覧

RSpec passwordのupdateテストが通らない

yupapapa

総合スコア24

RSpec

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/01/28 11:19

RSpecを利用して、userのupdate時のテストをしているのですが、以下のコードで実行すると、以下のエラーが発生してしまいます。

require 'rails_helper' RSpec.describe 'users', type: :system do let(:user) { FactoryBot.create(:user) } describe "user edit" do -------------------------- scenario "successful edit" do valid_login(user) visit user_path(user) click_link "Setting" fill_in 'Name', with: 'EditTest' fill_in "Email", with: "edit@example.com" fill_in 'Password', with: 'editpassword' fill_in 'Confirmation', with: 'editpassword' click_button "Save changes" expect(current_path).to eq user_path(user) expect(user.reload.name).to eq 'EditTest' expect(user.reload.email).to eq "edit@example.com" expect(user.reload.password).to eq 'editpassword' end end end
Failure/Error: expect(user.reload.password).to eq 'editpassword' expected: "editpassword" got: "password" (compared using ==)

FactoryBot

FactoryBot.define do factory :user do name { "Test User" } sequence(:email) { |n| "user_#{n}@example.com"} password { 'password' } password_confirmation { 'password' } end end

valid_login helper

def valid_login(user) visit root_path click_link "Log in" fill_in 'Email', with: user.email fill_in 'Password', with: user.password click_button 'Log in' end

エラー内容から、passwordの値が変更できていないバグが発生しておると思い、実際に試してみたところ、問題なくpasswordの変更が可能だったので、テストコードに不備があると思うのですが知識不足のためわからずじまいです。
ご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

詳しいことはわかりませんが、
たぶんやりたいことはこれでできると思います。

ruby

1user.reload 2expect(user.valid_password?("before_password")).to eq(false) 3expect(user.valid_password?("new_password")).to eq(true)

参考URL
https://www.c-and-d.org/rspec_controller2/

投稿2020/07/09 15:18

nao654

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問