[rspec-users] Helper methods can't be called within before hooks. Help, please.

Gordon Yeong anexiole at gmail.com
Fri Oct 14 03:10:57 EDT 2011


It's just that I did not find my reply surface after 20 mins and was
wondering if it was lost.

Sorry about that, everyone :( my apologies.


On 14 October 2011 16:01, Justin Ko <jko170 at gmail.com> wrote:

>
> On Oct 13, 2011, at 8:59 PM, Gordon wrote:
>
> >
> >
> > Hi, there,
> >
> >
> > I believe I have some problem with scoping.
> >
> > I have a controller spec file which tests a brands resource.
> > At the start of the file, I test the resource's access for different
> > users in a context block
> > a) not signed in
> > b) non-admin user signed in- I call my own helper method, login_user
> > c) admin user signed in - I call my own helper method,
> > login_admin_user
> > Specs there do pass successfully.
> >
> > I then create another context block to just test the resource for an
> > admin user that's signed in.
> > I tried calling login_admin_user in a before hook as per the previous
> > specs .
> >
> > It fails and I suspect that the current scope within the before hook
> > does not see my custom helper method, login_admin_user.
> > Here is the error message:
> > --------- Extract start -----------------
> >
> > /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'
> > ---------- Extract end ------------------
> >
> >
> > My specs is as follows:
> >
> > --------- spec/controllers/brands_controller_spec.rb (start)
> > --------------
> >
> >
> > 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 (end)
> > --------------
> >
> > What am I doing wrong?
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
>
> WARNING: Posting duplicates (with a different subject) will get you banned.
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20111014/e9581b5b/attachment-0001.html>


More information about the rspec-users mailing list