Closed meg-06 closed 5 days ago
お疲れ様です、下記の内容が分からないので質問したいです。 RSpecで「ユーザーが日本語を正しく登録できるかどうか」システムスペックを行いたいです。そのために、ユーザーログインをしないといけないですが、ここの処理で落ちてしまいます。仮説を立ててみて試してみたのですがどうしても分からないので、お答えいただけると幸いです。 Factorybotは使用していません。ログインにはsorceryを使用しています。
Factorybotは使用していません。ログインにはsorceryを使用しています。
・なぜ、ログインの処理は落ちてしまいますか?
TRANSACTION (0.9ms) ROLLBACK [dotenv] Set GOOGLE_CLIENT_ID [dotenv] Loaded .env ActiveRecord::InternalMetadata Load (1.3ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] ActiveRecord::SchemaMigration Load (1.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC [dotenv] Saved a snapshot of ENV TRANSACTION (0.1ms) BEGIN Started GET "/users/new" for 127.0.0.1 at 2024-09-16 22:00:26 +0900 Processing by UsersController#new as HTML Rendering layout layouts/application.html.erb Rendering users/new.html.erb within layouts/application Rendered shared/_error_messages.html.erb (Duration: 0.1ms | Allocations: 208) Rendered users/new.html.erb within layouts/application (Duration: 3.9ms | Allocations: 2904) Rendered shared/_before_login_header.erb (Duration: 0.3ms | Allocations: 493) Rendered shared/_flash_message.html.erb (Duration: 0.1ms | Allocations: 193) Rendered shared/_footer.html.erb (Duration: 0.2ms | Allocations: 358) Rendered layout layouts/application.html.erb (Duration: 8.6ms | Allocations: 9651) Completed 200 OK in 116ms (Views: 10.9ms | ActiveRecord: 7.1ms | Allocations: 58166) TRANSACTION (0.2ms) ROLLBACK 日本語登録機能 Email: test@example.com Password: <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Yubimoji</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="stylesheet" href="/assets/tailwind-9f877e59eabfda90e764d31ca13ad694115206e757b8e62a029db5da8e1d28b0.css" data-turbo-track="reload" /> <link rel="stylesheet" href="/assets/inter-font-8c3e82affb176f4bca9616b838d906343d1251adc8408efe02cf2b1e4fcf2bc4.css" data-turbo-track="reload" /> <link rel="stylesheet" href="/assets/application-685092d10c92994a34fc60428078996cbea6cd50ec884c88ffb727d467004471.css" data-turbo-track="reload" /> <script type="importmap" data-turbo-track="reload">{ "imports": { "application": "/assets/application-37f365cbecf1fa2810a8303f4b6571676fa1f9c56c248528bc14ddb857531b95.js", "@hotwired/turbo-rails": "/assets/turbo.min-918a6cf2f2be8ed9555c9a11eee69c7dc2f01770802815576efc931876b327fb.js", "@hotwired/stimulus": "/assets/stimulus.min-dd364f16ec9504dfb72672295637a1c8838773b01c0b441bd41008124c407894.js", "@hotwired/stimulus-loading": "/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js", "controllers/application": "/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js", "controllers/hello_controller": "/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js", "controllers": "/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js" } }</script> <link rel="modulepreload" href="/assets/application-37f365cbecf1fa2810a8303f4b6571676fa1f9c56c248528bc14ddb857531b95.js"> <link rel="modulepreload" href="/assets/turbo.min-918a6cf2f2be8ed9555c9a11eee69c7dc2f01770802815576efc931876b327fb.js"> <link rel="modulepreload" href="/assets/stimulus.min-dd364f16ec9504dfb72672295637a1c8838773b01c0b441bd41008124c407894.js"> <link rel="modulepreload" href="/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js"> <link rel="modulepreload" href="/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js"> <link rel="modulepreload" href="/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js"> <link rel="modulepreload" href="/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js"> <script type="module">import "application"</script> <meta charset="utf-8"> <title>ゆびもじ学習アプリ | Yubimoji</title> <meta name="description" content="ゆびもじアプリなら、好きな言葉を指文字に変換しながら学べます。あなたもこの新しい学び方を試してみませんか?"> <meta name="keywords" content="手話,手話学習,指文字,ゆびもじ,コミュニケーション"> <link rel="canonical" href="http://www.example.com/login"> <meta property="og:site_name" content="Yubimoji"> <meta property="og:title" content="ゆびもじ学習アプリ"> <meta property="og:description" content="ゆびもじアプリなら、好きな言葉を指文字に変換しながら学べます。あなたもこの新しい学び方を試してみませんか?"> <meta property="og:type" content="website"> <meta property="og:url" content="http://www.example.com/login"> <meta property="og:image" content="http://www.example.com/assets/ogp-02ace7fde11a14f92f65f6c6893aaba44af48d6d1dd820e39ff681d0f139c324.png"> <meta property="og:locale" content="ja-JP"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="#"> <meta name="twitter:image" content="http://www.example.com/assets/ogp-02ace7fde11a14f92f65f6c6893aaba44af48d6d1dd820e39ff681d0f139c324.png"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css"/> <script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script> <link rel="icon" type="image/x-icon" href="/assets/favicon-d43e7c2a918fc28ae196cbb8f02491e2ad18bd9dc297574d64b15e9e3aef4b9b.ico" /> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-ZD18XJDJYM"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-ZD18XJDJYM'); </script> </head> <body class="flex flex-col min-h-screen bg-gray-100 overflow-auto"> <header> <nav class="sticky top-0 border-solid border-gray-200 w-full border-b py-3 bg-white z-50 bg-inherit"> <div class="mx-auto "> <div class="w-full flex flex-col lg:flex-row"> <div class="flex ml-0 mr-auto lg:flex-row"> <a class="flex items-center" href="/"> <img alt="Logo" class="h-20 w-60" src="/assets/logo-59e7376cc377e9ab94fffa90b2c50c413df4683c9f13137ccb89e27bd8d07f94.png" /> </a> </div> <div class="hidden w-full lg:flex lg:pl-11 " id="navbar-default-example"> <ul class="flex items-center flex-col mt-4 lg:mt-0 lg:ml-auto lg:flex-row gap-4"> <li> <a class="flex items-center justify-between text-gray-500 text-sm lg:text-base font-medium hover:text-indigo-700 transition-all duration-500 mb-2 lg:mr-6 md:mb-0 md:mr-3" href="/">トップ</a> </li> <li> <a class="flex items-center justify-between text-gray-500 text-sm lg:text-base font-medium hover:text-indigo-700 transition-all duration-500 mb-2 lg:mr-6 md:mb-0 md:mr-3" rel="nofollow" data-method="delete" href="/login">ログイン</a> </li> <li> <a class="flex items-center justify-between text-gray-500 text-sm lg:text-base font-medium hover:text-indigo-700 transition-all duration-500 mb-2 lg:mr-6 md:mb-0 md:mr-3" href="/users/new">会員登録</a> </li> </ul> </div> </div> </div> </nav> <div class="alert alert-error px-8 py-6 text-white rounded-none"> ログインに失敗しました </div> </header> <main class="flex-grow flex items-center justify-center px-5"> <div class="w-full max-w-3xl"> <body class="bg-gray-100 flex items-center justify-center min-h-screen"> <div class="container"> <div class="row flex justify-center"> <div class="col-md-10 col-lg-8 mx-auto bg-white p-6 rounded-lg shadow-lg"> <h1 class="large-text text-center mb-6">ログイン</h1> <form action="/login" accept-charset="UTF-8" method="post"> <div class="mb-3"> <label class="block mb-2 text-gray-600 text-sm font-medium" for="email">メールアドレス</label> <input id="Medium-input" class="block w-full px-4 py-2.5 text-base font-normal shadow-xs text-gray-900 bg-transparent border border-gray-300 rounded-full placeholder-gray-400 focus:outline-none leading-relaxed" placeholder="メールアドレス" required="required" type="email" name="email" /> </div> <div class="mb-3"> <label class="block mb-2 text-gray-600 text-sm font-medium" for="password">パスワード</label> <input id="Medium-input" class="block w-full px-4 py-2.5 text-base font-normal shadow-xs text-gray-900 bg-transparent border border-gray-300 rounded-full placeholder-gray-400 focus:outline-none leading-relaxed" placeholder="パスワード" required="required" type="password" name="password" /> </div> <input type="submit" name="commit" value="ログイン" class="btn btn-primary w-full py-2.5 mt-4" data-disable-with="ログイン" /> </form></div> </div> </div> </body> </div> </main> <footer> <footer class="w-full bg-white border-t border-gray-200 mt-auto"> <div class="mx-auto max-w-7xl"> <!--Grid--> <div class="block py-5"> <div class="flex items-center justify-center flex-row flex-wrap lg:justify-between lg:flex-row"> <span class="text-sm text-gray-500">© yubimoji 2024, All rights reserved.</span> <ul class="text-sm flex items-center justify-center flex-row flex-wrap gap-4 md:gap-6 transition-all duration-500"> <li> <a class="text-gray-600 hover:text-gray-900" href="/pages/terms">利用規約</a> </li> <li> <a class="text-gray-600 hover:text-gray-900" href="/pages/privacy">プライバシーポリシー</a> </li> <li> <a class="text-gray-600 hover:text-gray-900" href="https://forms.gle/1prsYFcaZVG3GAQ97">お問い合わせ</a> </li> </ul> </div> </div> </div> </footer> </footer> </body> </html> ユーザーが日本語を正しく登録できる (FAILED - 1)
Failures:
1) 日本語登録機能 ユーザーが日本語を正しく登録できる Failure/Error: expect(page).to have_content 'ログアウト' expected to find text "ログアウト" in "トップ ログイン 会員登録\nログインに失敗しました\nログイン\nメールアドレス\nパスワード\n© yubimoji 2024, All rights reserved.\n利用規約 プライバシーポリシー お問い合わせ" ./spec/system/hiragana_spec.rb:15:in `block (2 levels) in '
spec/system/hiragana_spec.rb require 'rails_helper' RSpec.describe '日本語登録機能', type: :system do let(:user) { User.create!(name: 'Test User', email: 'test@example.com', password: 'password', password_confirmation: 'password') } before do puts "Email: #{user.email}" puts "Password: #{user.password}" visit login_path fill_in 'email', with: user.email fill_in 'password', with: user.password click_button 'ログイン' puts page.html expect(page).to have_content 'ログアウト' end it 'ユーザーが日本語を正しく登録できる' do visit hiraganas_path puts page.html fill_in 'hiragana_character', with: 'こんにちは' click_button '登録' expect(page).to have_content 'こんにちは' end end
フォームに入力がうまく行われていないことが原因かもしれないと思い調査を進めました。
仮説を元に探っていった結果Completed 422 Unprocessable Contentというエラーが発生しており、パスワード承認がうまくいっていないのではないかなと考えています。
Completed 422 Unprocessable Content
./spec/system/hiragana_spec.rb:15:in `block (2 levels) in <main>'があるので、処理自体は進んでいることから capybaraの設定忘れの可能性は低いと考えました。
./spec/system/hiragana_spec.rb:15:in `block (2 levels) in <main>'
<div class="mb-3"> <label class="block mb-2 text-gray-600 text-sm font-medium" for="email">メールアドレス</label> <input id="Medium-input" class="block w-full px-4 py-2.5 text-base font-normal shadow-xs text-gray-900 bg-transparent border border-gray-300 rounded-full placeholder-gray-400 focus:outline-none leading-relaxed" placeholder="メールアドレス" required="required" type="email" name="email" /> </div> <div class="mb-3"> <label class="block mb-2 text-gray-600 text-sm font-medium" for="password">パスワード</label> <input id="Medium-input" class="block w-full px-4 py-2.5 text-base font-normal shadow-xs text-gray-900 bg-transparent border border-gray-300 rounded-full placeholder-gray-400 focus:outline-none leading-relaxed" placeholder="パスワード" required="required" type="password" name="password" /> </div>
ラベル名をHTMLで確認しましたがemailとpasswordで問題なさそうです。
#<User id: 21, email: "test@example.com", crypted_password: "$2a$04$6FIfrEZ8ch2zch/bj45Gn.ZFC7fygBzyQpPSaiaR9HI...", salt: "BuZwzA3JsyLye2jEPh6b", name: "Test User", created_at: "2024-09-16 15:21:01.957155000 +0000", updated_at: "2024-09-16 15:21:01.957155000 +0000">こち らがあるので問題なく作成されていると思います。
#<User id: 21, email: "test@example.com", crypted_password: "$2a$04$6FIfrEZ8ch2zch/bj45Gn.ZFC7fygBzyQpPSaiaR9HI...", salt: "BuZwzA3JsyLye2jEPh6b", name: "Test User", created_at: "2024-09-16 15:21:01.957155000 +0000", updated_at: "2024-09-16 15:21:01.957155000 +0000">
Parameters: {"email"=>"test@example.com", "password"=>"[FILTERED]", "commit"=>"ログイン"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'test@example.com' ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]]
また、上記のログにもユーザーテーブルに問い合わせができている形跡があるので問題なく作成されていると思います。
Parameters: {"email"=>"test@example.com", "password"=>"[FILTERED]", "commit"=>"ログイン"}があるので問題なく送信されていると考えます。
Parameters: {"email"=>"test@example.com", "password"=>"[FILTERED]", "commit"=>"ログイン"}
ローカル環境で、私自身がログインフォームにメールアドレスとパスワードを入力してログインを試みたところ正常にログインが成功しました。したがって、Sorceryの設定に問題はないと考えています。
お手数をおかけしますが、ご教示いただきますようお願いします。
fill_in 'password', with: user.password
ここですが、通常user.passwordで値は取得できないので直接文字列で'password'と打つのが良いかなと思います
'password'
fill_in 'password', with: 'password'としたら、無事にテストを通すことできました。 対処いただきありがとうございました。
お疲れ様です、下記の内容が分からないので質問したいです。 RSpecで「ユーザーが日本語を正しく登録できるかどうか」システムスペックを行いたいです。そのために、ユーザーログインをしないといけないですが、ここの処理で落ちてしまいます。仮説を立ててみて試してみたのですがどうしても分からないので、お答えいただけると幸いです。
Factorybotは使用していません。ログインにはsorceryを使用しています。
質問したい内容
・なぜ、ログインの処理は落ちてしまいますか?
エラーに関係がありそうなログ
Failures:
1) 日本語登録機能 ユーザーが日本語を正しく登録できる Failure/Error: expect(page).to have_content 'ログアウト' expected to find text "ログアウト" in "トップ ログイン 会員登録\nログインに失敗しました\nログイン\nメールアドレス\nパスワード\n© yubimoji 2024, All rights reserved.\n利用規約 プライバシーポリシー お問い合わせ" ./spec/system/hiragana_spec.rb:15:in `block (2 levels) in'
関係のありそうなコード
仮説
フォームに入力がうまく行われていないことが原因かもしれないと思い調査を進めました。
結果
仮説を元に探っていった結果
Completed 422 Unprocessable Content
というエラーが発生しており、パスワード承認がうまくいっていないのではないかなと考えています。試したこと
Capybaraの設定を忘れている
./spec/system/hiragana_spec.rb:15:in `block (2 levels) in <main>'
があるので、処理自体は進んでいることから capybaraの設定忘れの可能性は低いと考えました。fill_in のラベル名が間違えている
ラベル名をHTMLで確認しましたがemailとpasswordで問題なさそうです。
ユーザーが作成されていない
#<User id: 21, email: "test@example.com", crypted_password: "$2a$04$6FIfrEZ8ch2zch/bj45Gn.ZFC7fygBzyQpPSaiaR9HI...", salt: "BuZwzA3JsyLye2jEPh6b", name: "Test User", created_at: "2024-09-16 15:21:01.957155000 +0000", updated_at: "2024-09-16 15:21:01.957155000 +0000">
こち らがあるので問題なく作成されていると思います。また、上記のログにもユーザーテーブルに問い合わせができている形跡があるので問題なく作成されていると思います。
フォームが送信されていない
Parameters: {"email"=>"test@example.com", "password"=>"[FILTERED]", "commit"=>"ログイン"}
があるので問題なく送信されていると考えます。sorceryがそもそも動いていない
ローカル環境で、私自身がログインフォームにメールアドレスとパスワードを入力してログインを試みたところ正常にログインが成功しました。したがって、Sorceryの設定に問題はないと考えています。
お手数をおかけしますが、ご教示いただきますようお願いします。