【问题标题】:Scope problems for before hooks using helper methods?使用辅助方法的前钩子的范围问题?
【发布时间】:2014-03-04 05:20:01
【问题描述】:

我认为我在范围界定方面遇到了一些问题。

我有一个用于测试品牌资源的控制器规范文件。 在文件的开头,我测试了不同资源的访问权限 上下文块中的用户 a) 未登录 b) 非管理员用户登录 - 我调用我自己的辅助方法 login_user c) 管理员用户登录 - 我调用我自己的辅助方法, login_admin_user 那里的规格确实通过了。

然后我创建另一个上下文块来测试资源 已登录的管理员用户。 我尝试按照前面的方法在 before 钩子中调用 login_admin_user 规格。

它失败了,我怀疑当前范围在 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'

--------- 提取结束 ------

我的规格如下:

--------- 规格/控制器/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

--------- 规格/控制器/brands_controller_spec.rb(结束)

【问题讨论】:

    标签: rspec


    【解决方案1】:

    login_admin_user 创建了一个 before 钩子,但这里是 inside a before 钩。那是行不通的。试试:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2015-12-17
      相关资源
      最近更新 更多