On Wed, Apr 22, 2009 at 12:04 PM, Stephen H. Gerstacker
<[email protected]> 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
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users