0

私は Authlogic を使用していますが、Rails 3.2.12 にアップグレードした後、Selenium テストを:js=>trueで動作させるのに苦労しています。Rails 3.1.3 で動作していたのと同じテストです。Spork を使用してテストを実行しています。

Selenium を介してログインし、Firefox (19.0.2) を起動し、ログイン フォームに入力しますが、Authlogic から標準の「このアクションへのアクセスは許可されていません」という権限エラーが表示されます。

多くの人がこれに問題を抱えていることがわかりますが、前述したように、Rails 3.1.3 から Rails 3.2.12 にアップグレードして初めて問題になりました。この問題は、私の spec_helper ファイル (以下) 内にあり、特に

モジュールAuthlogic

ここから取得したブロック:

Capybara + Cucumber + Selenium Driver を使用した Authlogic が機能しない

**spec_helper.rb**

require 'rubygems'
require 'spork'
require 'authlogic/test_case' 

include Authlogic::TestCase

Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)

  require 'rspec/rails'

  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|

    config.color_enabled = true

    ApplicationController.skip_before_filter :activate_authlogic
    config.before(:each, :type => :request) do
      activate_authlogic
    end

    config.include FactoryGirl::Syntax::Methods

    config.include Capybara::DSL

    config.use_transactional_fixtures = false

    config.before(:suite) do
      DatabaseCleaner.clean_with(:truncation)
    end

    config.before(:each) do
      DatabaseCleaner.strategy = :transaction
    end

    config.before(:each, :js => true) do
      Capybara.current_driver = :selenium

      DatabaseCleaner.strategy = :truncation

      module Authlogic
          module Session
            module Activation
              module ClassMethods
                def controller
                  if !Thread.current[:authlogic_controller]
                    Thread.current[:authlogic_controller] = Authlogic::TestCase::MockController.new
                  end
                Thread.current[:authlogic_controller]
              end
            end
          end
        end
       end
    end

    config.before(:each) do
      DatabaseCleaner.start
    end

    config.after(:each) do
      DatabaseCleaner.clean
    end

    config.include(MailerMacros)
    config.before(:each) { reset_email }

    config.mock_with :mocha

    config.infer_base_class_for_anonymous_controllers = false

    config.order = "random"

    config.treat_symbols_as_metadata_keys_with_true_values = true
    config.filter_run :focus => true
    config.run_all_when_everything_filtered = true
  end
end

Spork.each_run do
  FactoryGirl.reload
end

私の理解では、Authlogic と Selenium Webdriver は異なるスレッドで動作するため、spec_helper ファイルにこのパッチが必要です。

Request Spec で、Authlogic からパーミッション エラーが発生します。問題の Request Spec テストは次のとおりです。

# UNIT REQUEST SPEC
require 'spec_helper'

describe "Units" do

  describe "GET /admin/units/new" do
    before(:each) do
      activate_authlogic
      UserSession.create FactoryGirl.create(:admin_user, :email => "foo@bar.com", :password => "password", :password_confirmation => "password")      

      visit root_path
      fill_in "user_session[email]", :with => "foo@bar.com"
      fill_in "user_session[password]", :with => "password" 
      click_button "Sign In"    
    end

    it "displays a pop up dialog after unit is created", :focus, :js => true do
      visit new_admin_unit_path
      fill_in "Title", :with => "Unit Title"
      fill_in "Code", :with => "U-TEST"
      fill_in "Learning Outcome", :with => "Some Learning Outcome"
      fill_in "unit[learning_outcomes_attributes][0][assessment_methods_attributes][0][content]", :with => "Some Assessment Criteria"

      click_button "Save and Publish"      
      page.should have_css('div.ui-dialog')
    end
  end
end

私のカピバラのテストは以下で問題なく動作しています:

activate_authlogic
UserSession.create FactoryGirl.build(:user)

before(:each) ブロックでは、:js=>true を使用した場合にのみ問題が発生します

だから、私の質問は次のとおりです。

  • Rails 3.2.x では、spec_helper の修正 (モジュール Authlogic ... ) が機能しなくなったということですか。
  • 実際にそうである場合、これを機能させる「通常の」方法は何ですか?
4

1 に答える 1