ソーサリー認証ジェム: https://github.com/NoamB/sorcery
Sorcery の作成者は、Test::Unit 機能テストに含まれる Sorcery テスト ヘルパーを使用したサンプル Rails アプリを提供しています: https://github.com/NoamB/sorcery-example-app/blob/master/test/functional/users_controller_test.rb
# Test::Unit functional test example
require 'test_helper'
class UsersControllerTest < ActionController::TestCase
setup do
@user = users(:noam)
end
test "should show user" do
login_user
get :show, :id => @user.to_param
assert_response :success
end
login_user
しかし、RSpec コントローラー仕様で作業する方法がわかりません。
/gems/sorcery-0.7.5/lib/sorcery/test_helpers/rails.rb:7:in `login_user':
undefined method `auto_login' for nil:NilClass (NoMethodError)
上記のエラーに関する Sorcery gem の関連コードは次のとおりです: https://github.com/NoamB/sorcery/blob/master/lib/sorcery/test_helpers/rails.rb
module Sorcery
module TestHelpers
module Rails
# logins a user and calls all callbacks
def login_user(user = nil)
user ||= @user
@controller.send(:auto_login,user)
@controller.send(:after_login!,user,[user.send(user.sorcery_config.username_attribute_names.first),'secret'])
end
def logout_user
@controller.send(:logout)
end
end
end
end
アップデート:
Sorcery のドキュメント「Testing in Rails 3」に従って、実際include Sorcery::TestHelpers::Rails
にspec_helper.rb
.
Sorcery テスト ヘルパーlogin_user
は で動作しますが、がコントローラーの仕様に@controller
あるため、エラーが発生します。これが私の仕様です:@controller
nil
#spec/controllers/forums_controller_spec.rb
require 'spec_helper'
describe ForumsController do
render_views
describe 'GET new' do
describe 'when guest' do
it 'should deny and redirect' do
get :new
response.should redirect_to(root_path)
end
end
describe 'when admin' do
p @controller #=> nil
@user = User.create!(username: "Test", password: "secret", email: "test@test.com")
login_user # <--------------- where the error occurs
it 'should resolve' do
get :new
response.should render_template(:new)
end
end
end
end