Sorcery + Request Specで undefined local variable or method `user_sessions_url'
Sorceryを使ったユーザー認証のあるRailsアプリケーションについて、
Request Specでユーザーログインしている状態としていない状態でテストをしようとしたら
undefined local variable or method
user_sessions_url'`
が出たのでそのあたりの話
Request Specでログインできるようにするためには、
RSpec.configure do |config| config.include Sorcery::TestHelpers::Rails::Request, type: :request end
をspec_helper.rbがrails_helper.rbに書けばいいらしい
これによって login_user(user)
が使えるようになるという怪情報を得た
ソース: Testing Rails · Sorcery/sorcery Wiki · GitHub
(注: 色々まちがっている?更新されていない?のでこのソースはあんまり信用しないほうが良さそう
仕方ないので原典にあたると、
sorcery/request.rb at 8d2d0a59bdeeb207428f9ba3073571f563ed01e6 · Sorcery/sorcery · GitHub
# Defaults - @user, 'secret', 'user_sessions_url' and http_method: POST def login_user(user = nil, password = 'secret', route = nil, http_method = :post)
routeを指定しないと user_sessions_url
が呼ばれて、これがタイトルのエラーを起こしていたらしい
じゃあ適当に
login_user(create(:user), 'password', login_path)
とかしてログインのPOSTの投げ先のパスを指定してやれば解決・・・
ではあるが、このヘルパーメソッドはログイン用のパスに認証情報とパスワードをPOSTしてくれるだけなので、
自前で書いてshared_examplesとかに入れておいたほうが何かと取り回し良さそうだなあとおもいましたまる