You''re getting mixed up between stubbing the methods on the class
(Brand) and the instance (Brand.new)
Try the corrections below:
On 16 Oct 2009, at 05:25, Elza wrote:
>
> I am starting with Rspec and I am having some errors in the Get/index
> Can someone help me with this?
>
> describe BrandsController, ''GET /index'' do
> ##############################################################
> should_require_login :get, :index
> ##############################################################
> describe "authenticated user" do
> ##############################################################
> before do
> login_as_user
> @brands = mock_model(Brand)
@brand = mock_model(Brand)
@brands = [@brand]
> @brands.stub!(:paginate).and_return(@brands)
Brand.stub!(:paginate).and_return(@brands)
> end
> ##############################################################
> def do_get
> get :index
> end
>
> ##############################################################
> it ''should load the brands'' do
> @brands.should_receive(:paginate).with(
Brand.should_receive(:paginate).with(
> :conditions => {:active => ''true''},
> :order =>''brands.name''
> ).and_return(@brands)
>
> do_get
>
> assigns[:brands].should == @brands
> end
> end
> end
> ************************************
> My controller is
> def index
> # Build the SQL conditions object based on the parameters received.
> conditions = Sql::Conditions.new
> conditions.and(''name LIKE ?'',
"%#{get_param(:name)}%") if
> get_param(:name)
> conditions.and(''active = ?'', true)
> if !get_param(:include_inactive, :boolean)
>
> @brands > Brand.paginate(
> :conditions => conditions.to_sql,
> :order => build_sort_conditions(:name, true),
> :page => get_param(:page, :integer),
> :per_page => 10
> )
> end
> ************************************************
>
> The error is
>
> ''BrandsController GET /index authenticated user should load the
> brands''
> FAILED
> expected: #<Brand:0xfd2e56 @name="Brand_1058">,
> got: [] (using ==)
> --
> View this message in context:
http://www.nabble.com/Help-me-with-Controllers-spec-tp25919605p25919605.html
> Sent from the rspec-users mailing list archive at Nabble.com.
By the way, a more general comment if you don''t mind me offering it,
is that building SQL like this in a controller is considered a bit of
an anti-pattern. You would be better off (and, funnily enough, find
the mocks a lot easier to write) if you dreamed up a new method on
Brand, something like Brand.paginage_for_name and pushed the logic
that builds the SQL conditions down into the model.
cheers,
Matt
+447974 430184
matt at mattwynne.net
http://mattwynne.net