9

ソーサリー認証ジェム: 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::Railsspec_helper.rb.

Sorcery テスト ヘルパーlogin_userは で動作しますが、がコントローラーの仕様に@controllerあるため、エラーが発生します。これが私の仕様です:@controllernil

#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
4

4 に答える 4

8

FWIW、私はこの問題に対する答えを探すのに多くの時間を費やしました. カピバラとRSpecを使っています。結局のところ、ログインを機能させるには、Sorcery を使用して手動でログインする必要があります。

ここで Sorcery/Rspec/Capybara との統合テストの作成に関する Gist を作成しました: https://gist.github.com/2359120/9989c14af19a48ba726240d030c414b882b96a8a

于 2012-04-11T14:04:42.247 に答える
3

spec_helper にソーサリー テスト ヘルパーを含める必要があります。

    include Sorcery::TestHelpers::Rails

ソーサリー wiki を参照してください: https://github.com/NoamB/sorcery/wiki/Testing-rails-3

サンプル Rails アプリでは、これはhttps://github.com/NoamB/sorcery-example-app/blob/master/test/test_helper.rb#L13で行われます。

更新しました

同じフォルダーに正常に合格する他のコントローラー仕様がありますか? RSpec は通常、"spec/controllers" フォルダー内のスペックのコントローラー テストに必要なものを混ぜ合わせます。

書くことで、これをコントローラー仕様として明示的にマークすることができます

describe ForumsController, :type => :controller do
于 2012-01-03T16:09:53.703 に答える
0

次のように、ユーザーの作成とログインを before(:each) ブロックに入れる必要があります。

describe 'when admin' do
  before(:each) do
    @user = User.create!(username: "Test", password: "secret", email: "test@test.com")
    login_user
  end

  it 'should resolve' do
    get :new
    response.should render_template(:new)
  end
end
于 2012-01-04T13:02:26.617 に答える