On Wed, Apr 22, 2009 at 12:04 PM, Stephen H. Gerstacker <step...@shortround.net> wrote: > I have a Rails controller that I am using 'before_filter' on certain actions > to assign some extra variables. I noticed the 'shared_examples_for' method > and thought this would be a good way to test that the given actions are > loading what they need. I wrote the following: > > shared_examples_for 'pages showing the yearly archive' do > > it 'should assign a list of yearly archives' do > Factory.create(:post, :published_at => Time.local(2009,02,01)) > Factory.create(:post, :published_at => Time.local(2009,01,01)) > Factory.create(:post, :published_at => Time.local(2008,01,01)) > Factory.create(:post, :published_at => Time.local(2007,01,01)) > Factory.create(:post, :published_at => Time.local(2001,01,01)) > > get :index > > assigns[:years].should == [ 2009, 2008, 2007, 2001 ] > end > > end > > The problem is, it is specific to the 'index' action. I can't use the > 'it_should_behave_like "pages showing the yearly archive"' for other > actions. > > Am I just doing this wrong or is there a way to fix this?
Shared examples don't support parameterization, but macros do. Try something like this: module Macros def shows_yearly_archive_for(requests={}) requests.keys.each do |action| it "should assign a list of yearly archives on #{requests[action]} #{action}" do Factory.create(:post, :published_at => Time.local(2009,02,01)) Factory.create(:post, :published_at => Time.local(2009,01,01)) Factory.create(:post, :published_at => Time.local(2008,01,01)) Factory.create(:post, :published_at => Time.local(2007,01,01)) Factory.create(:post, :published_at => Time.local(2001,01,01)) send requests[action], action assigns[:years].should == [ 2009, 2008, 2007, 2001 ] end end end end describe SomeController do extend Macros shows_yearly_archive_for :index => :get end You can also extend with Macros from the config in spec_helper: Spec::Runner.configure {|c| c.extend(Macros, :type => :controller)} HTH, David ps - completely un-tested - that was off the top of my head > > - Stephen H. Gerstacker > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users