Where does @company come from initially in the show controller? Is there a before_filter?

describe AddressesController, "handling GET /addresses/1" do
  before do
    @address = mock_model(Address)
    @company = mock_model(Company)

    Company.stub!(:find_by_id).and_return(@company)

    @company.stub!(:addresses)
    @company.addresses.stub!(:find).with("1").and_return(@address)
  end
end

Give that a shot, you might want to make some of those expectations instead of stubs, depending on your style.

Nathan Sutton
[EMAIL PROTECTED]
rspec edge revision 2944
rspec_on_rails edge revision 2944
rails edge revision 8186



On Nov 22, 2007, at 5:24 AM, Sahyoun wrote:

Pat, thanks. That helped. I'm now trying to get my head around the error:

Spec::Mocks::MockExpectationError in 'AddressesController handling GET /addresses/1 should be successful'
Mock 'Address_1006' received unexpected message :find with ("1")

My show method in the addresses controller:
  def show
    @address = @company.addresses.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @address }
    end
  end

In the controller spec:

describe AddressesController, "handling GET /addresses/1" do
  before do
    @address = mock_model(Address)
    @company = mock_model(Company)

    Company.stub!(:find_by_id).and_return(@company)
    @company.stub!(:addresses).and_return(@address)
  end

  def do_get
    get :show, :id => "1", :company_id => "1"
  end

  it "should be successful" do
    do_get
    response.should be_success
  end

....


I know that @company.stub!(:addresses).and_return(@address) is incorrect. I'm trying to work out how I can stub out:
@address = @company.addresses.find(params[:id])

Thanks for any pointers.

Omar


On 21/11/2007, Pat Maddox < [EMAIL PROTECTED]> wrote:
On Nov 21, 2007 1:35 AM, Pat Maddox < [EMAIL PROTECTED]> wrote:
> On Nov 21, 2007 1:15 AM, Sahyoun <[EMAIL PROTECTED]> wrote:
> > Thanks. That helped. I now have:
> >
> > before do
> >     @address = mock_model(Address)
> >     @company = mock_model(Company)
> >     Company.stub!(:find_by_id).and_return(@company)
> >
> >     @company.stub!(:addresses).and_return(@addresses)
> >   end
> >
> >
> > with only one error remaining:
> >
> > 'AddressesController handling GET /addresses should assign the found
> > addresses for the view' FAILED
> > expected: [nil],
> >      got: nil (using ==)
> >
> >  Spec:
> >   it "should assign the found addresses for the view" do
> >     do_get
> >     assigns[:addresses].should == [EMAIL PROTECTED]
> >   end
> >
> >
> > I thought @company.stub!(:addresses).and_return(@addresses) would be > > sufficient for the above to pass. My understanding of mocking and stubbing > > is sketchy at the moment. Any explanation on how to get this to pass would
> > be appreciated.
>
> @company.stub!(:addresses).and_return([EMAIL PROTECTED])
>
> If you're expecting an array, then you need the stub to return an array.
>
> Pat
>

Guh, sorry, should have looked a bit more closely:

@company.stub!(:addresses).and_return([EMAIL PROTECTED])

Pat
_______________________________________________
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

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to