0
deviseを使用してアプリケーションに認証してレコードを作成するrspec機能テストを作成しているところに問題があります。rspec機能テスト中にリダイレクト時に現在のユーザーをログアウトします
リダイレクト時に送信を押してレコードを作成すると、私はセッションからログアウトします。
ログファイルに何か奇妙なものが見つかりません。この問題は、selenium-webdriverとchromedriver-helperの両方を使用して再現できます。
他の誰かがこの問題に遭遇したかどうか、どのように解決したのかなと思います。
私の環境:
- レール4.2.6
- 工夫3.5.6
- セレンwebdriverを2.53.0
- chromedriverヘルパー1.0.0
- RSpecのレール3.4。 2
- カピバラ2.7.0
仕様/サポート/ devise.rb
RSpec.configure do |config|
config.include Devise::TestHelpers, type: :controller
config.include Devise::TestHelpers, type: :view
end
スペック/機能/ノート/ create_note_spec.rb:
require 'rails_helper'
feature 'note management' do
scenario 'user can create a new note' do
visit root_path
click_link 'Sign In'
fill_in 'user_email', with: user.email
fill_in 'user_password', with: CONFIG[:test_user_password]
click_button 'Log in'
click_link 'Notes'
click_link 'New Note'
fill_in 'note_title', with: Faker::Lorem.word
fill_in 'note_content', with: Faker::Lorem.paragraph
click_button 'Create Note'
expect(page).to have_content 'Note created'
end
end
私はそのwikiページを見ました。読んでいるところから、私が作成した各機能テストのログインプロセスをやりたくない場合、ウォーデンテストモードを有効にすることはオプションです。私は実際にそのプロセスを踏みたいと思っており、Warden Test Modeはユーザをスタブしてログインプロセスをバイパスするようにしています(私が正しく理解していれば)。ちょうど私がサポートファイルにコードを追加して、スペックをもう一度実行しました。私も同じ問題があります。 RSpecは私がログインする必要のある出力でテストが失敗したことを教えてくれます。 – Vell
これで失敗した可能性のあるバラエティ。ユーザー名とパスワードが正しく設定されていない可能性があり、ルートパスにもアクセス制限があり、リダイレクトが正しく行われていないと、何か起こっているかどうかを確認するためにいくつかのscreenshotステートメントでコードを捨てる可能性があります。それとは別に、スピードの観点からは、機能仕様のログイン・メカニズムをバイパスし、ログインのための仕様を個別に持つことが理にかなっています。すべての単一仕様でログインすれば、テストは永遠に終わります。 – jfornoff
私はログインしてテストの最後に行くので、ユーザー名とパスワードは問題ありません。フォームの送信とリダイレクトがセッションログアウトの原因になります。最小限のコードでバニラアプリケーションから試しましたが、同じ結果が得られました。私はauthenticate_userを持っています!メソッドをapplication_controller.rbファイルに追加する必要があります。ログインを求めるプロンプトが表示されますが、すでに認証されている場合は、アプリケーション全体に制限なくアクセスする必要があります。私はブラウザを介してそれを実行し、すべてのステップで詮索してみました。すべてがOKと思われます。本当にうんざり。 – Vell