Rails: огурец забывает авторизации CanCan - PullRequest
2 голосов
/ 13 сентября 2010

Я пытаюсь написать несколько тестов на огурец, чтобы убедиться, что разрешения cancan установлены правильно, и у меня возникла странная проблема:

Когда я вхожу через следующий код, capybara говорит, что явошел как ожидалось.Тем не менее, когда я захожу на ресурс, которому требуется данный логин, я получаю сообщение CanCan «не авторизовано».Capybara распечатывает «зарегистрированный как testsuperadmin с ролью superadmin» (нужную роль) на той же самой странице «запрещенный доступ».

Доступ к той же странице вручную, а не через огурец / капибару, авторизация предоставляетсяработает отлично.Аутентификация обрабатывается devise.

Я пытался добавить @ allow-rescue над сценарием и ActionController :: Base.allow_rescue = true к features / support / env.rb - ни один из них не дал никакого эффекта.

Есть предложения?Этот действительно поставил меня в тупик.

Ура ...

 #app/models/ability.rb
 class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.role? :superadmin
        can :manage, :all
    elsif user.role? :admin
        can :manage, [Broker, User]
    elsif user.role? :staff
        can :manage, Broker
    elsif user.role? :broker
        can :manage, Broker, :user_id => user.id
        can :read, Broker
    elsif user.role? :customer
        can :manage, User, :id => user.id
    else can :read, [Broker]
    end
  end
end



# features/brokers.feature
@allow-rescue
Scenario: Successfully create Broker
    Given I am logged in as "testsuperadmin" with password "testpassword"
    When I go to the create broker page
    Then show me the page # Authorization denied here, but signed in successfully if this line moved between "Given I am logged in" ... and "When I go to to create broker page"
    ......



# features/steps/devise_steps.rb
Given /^I am logged in as "([^\"]*)" with password "([^\"]*)"$/ do |username, password|
    #visit path_to(sign in page)
    visit "/users/sign_out"
    visit "/users/sign_in"
    fill_in("user[username]", :with => username)
    fill_in("user[password]", :with => password)
    click_button("Sign in")
end



  # app/controllers/brokers_controller.rb
  class BrokersController < ApplicationController
    load_and_authorize_resource

    # ...
    def new
      @broker = Broker.new

      respond_to do |format|
        format.html # new.html.erb
        format.xml  { render :xml => @broker }
      end
    end
...