Проблемы с областью действия для хуков перед использованием вспомогательных методов - PullRequest
1 голос
/ 28 ноября 2011

Полагаю, у меня есть некоторые проблемы со сферой.

У меня есть файл спецификации контроллера, который проверяет ресурс брендов. В начале файла я проверяю доступ ресурса к разным пользователи в блоке контекста а) не вошли в систему б) не пользователь с правами администратора - я вызываю свой собственный вспомогательный метод, login_user в) администратор вошел в систему - я вызываю свой собственный вспомогательный метод login_admin_user Спецификации проходят успешно.

Затем я создаю другой блок контекста, чтобы просто проверить ресурс на наличие администратор, который вошел в систему. Я пытался вызвать login_admin_user в хуке before, как и в предыдущем спецификации.

Сбой, и я подозреваю, что текущая область действия в хуке before не видит мой пользовательский вспомогательный метод, login_admin_user. Вот сообщение об ошибке:

--------- Начало извлечения -----------------

/usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/
active_support/dependencies.rb:235:in `load': /Users/anexiole/projects/
try_rails/spec/controllers/brands_controller_spec.rb:164: syntax
error, unexpected keyword_end, expecting $end (SyntaxError)
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/
active_support/dependencies.rb:235:in `block in load'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/
active_support/dependencies.rb:227:in `load_dependency'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.9/lib/
active_support/dependencies.rb:235:in `load'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/
rspec/core/configuration.rb:419:in `block in load_spec_files'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/
rspec/core/configuration.rb:419:in `map'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/
rspec/core/configuration.rb:419:in `load_spec_files'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/
rspec/core/command_line.rb:18:in `run'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/
rspec/core/runner.rb:80:in `run_in_process'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/
rspec/core/runner.rb:69:in `run'
  from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/
rspec/core/runner.rb:11:in `block in autorun'

---------- Извлечь конец ------------------

Мои спецификации следующие:

--------- spec / controllers / brands_controller_spec.rb (начало)

require 'spec_helper'

describe BrandsController do

  # This should return the minimal set of attributes required to create a valid
  # Brand. As you add validations to Brand, be sure to
  # update the return value of this method accordingly.
  def valid_attributes
    {
        'name' => 'J Speed',
        'description' => 'From gunsai province'
    }
  end


    context 'checking access for varying users' do
        describe 'brands access is not available to users who have not
signed in' do
            it 'users that are not logged in will be sent to the sign
in page' do
                get :index
                response.should redirect_to(new_user_session_path)
            end
        end

        describe 'brands access is not available to regular users' do
            login_user

            it 'regular users that are logged in will be sent to home
page' do
                get :index
                response.should redirect_to(root_path)
            end
        end

        describe 'brands access is available only to admin users' do
            login_admin_user

            it 'admin users that are logged in can access the index
page' do
                get :index
                response.should render_template('index')
            end
        end
    end

    context 'with an admin user signed in' do    # <----- starts
failing in this context
        before(:each) do
            login_admin_user
        end

        describe "creates a new brand entry" do
            it "assigns a new brand as @brand" do
                get :new
                assigns(:brand).should be_a_new(Brand)
            end
        end
    end
end

--------- spec / controllers / brands_controller_spec.rb (конец)

1 Ответ

1 голос
/ 28 ноября 2011

login_admin_user создает хук перед, но здесь он внутри до крюк. Это не работает Попробуйте:

context 'with an admin user signed in' do
  login_admin_user # not inside a before hook

  describe "creates a new brand entry" do
    it "assigns a new brand as @brand" do
      get :new
      assigns(:brand).should be_a_new(Brand)
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...