I’m stuck! Not sure what I’m missing but I’m struggling to get a shared
example group working with my controller specs. Here is a piece of the
backtrace:
/Users/20217633/.rvm/gems/ruby-1.9.2-p0@rails3/gems/rspec-core-2.0.0.rc/lib/rspec/core/example_group.rb:68:in
it_should_behave_like': Could not find shared example group named "an admin is logged in" (RuntimeError) from /Users/20217633/apps/curriculum/spec/controllers/users_controller_spec.rb:5:in
block in <top (required)>’
from
/Users/20217633/.rvm/gems/ruby-1.9.2-p0@rails3/gems/rspec-core-2.0.0.rc/lib/rspec/core/example_group.rb:132:in
module_eval' from /Users/20217633/.rvm/gems/ruby-1.9.2-p0@rails3/gems/rspec-core-2.0.0.rc/lib/rspec/core/example_group.rb:132:in
subclass’
from
/Users/20217633/.rvm/gems/ruby-1.9.2-p0@rails3/gems/rspec-core-2.0.0.rc/lib/rspec/core/example_group.rb:119:in
describe' from /Users/20217633/.rvm/gems/ruby-1.9.2-p0@rails3/gems/rspec-core-2.0.0.rc/lib/rspec/core/extensions/object.rb:7:in
describe’
from
/Users/20217633/apps/curriculum/spec/controllers/users_controller_spec.rb:3:in
`<top (required)>’
I’m using the following:
rails 3.0
rspec-rails 2.0.0.rc (and friends)
cucumber-rails 0.3.2
factory_girl_rails 1.0
And the following for shared examples:
module ExampleGroupMethods
describe “an admin is logged in”, :shared => true do
before(:each) do
controller.stubs(:logged_in? => true)
controller.stubs(:current_user => Factory.create(:admin))
end
end
describe “a supporter is logged in”, :shared => true do
before(:each) do
controller.stubs(:logged_in? => true)
controller.stubs(:current_user => Factory.create(:supporter))
end
end
describe “a manager is logged in”, :shared => true do
before(:each) do
controller.stubs(:logged_in? => true)
controller.stubs(:current_user => Factory.create(:manager))
end
end
end
And the follow controller spec:
describe UsersController do
it_should_behave_like “an admin is logged in”
describe “handling /users” do
before do
@user = mock_model(User)
end
def do_get
get :index
end
it "should assign users to the view" do
User.should_receive(:all).with(:order => "last_name,
first_name").and_return([ @user ])
do_get
end
end
end
And finally this spec_helper:
This file is copied to spec/ when you run 'rails generate
rspec:install’
ENV[“RAILS_ENV”] ||= ‘test’
require File.expand_path(“…/…/config/environment”, FILE)
require ‘rspec/rails’
Requires supporting ruby files with custom matchers and macros, etc,
in spec/support/ and its subdirectories.
Dir[Rails.root.join(“spec/support/**/*.rb”)].each {|f| require f}
RSpec.configure do |config|
== Mock Framework
If you prefer to use mocha, flexmock or RR, uncomment the
appropriate
line:
config.mock_with :mocha
config.mock_with :flexmock
config.mock_with :rr
config.mock_with :rspec
Remove this line if you’re not using ActiveRecord or ActiveRecord
fixtures
config.fixture_path = “#{::Rails.root}/spec/fixtures”
If you’re not using ActiveRecord, or you’d prefer not to run each of
your
examples within a transaction, remove the following line or assign
false
instead of true.
config.use_transactional_fixtures = true
see http://asciicasts.com/episodes/157-rspec-matchers-macros
config.include(ControllerMacros, :type => :controller)
see http://pastie.org/870928
config.include(ExampleGroupMethods, :type => :controller)
end
Anyone have a suggestion? Thanks in advance