# Rspec, cosa c'e' di sbagliato?

**URL:** <https://www.ruby-forum.com/t/rspec-cosa-ce-di-sbagliato/206703>\
**Category:** IT\
**Created:** [May 7, 2011, 7:12pm UTC](https://www.ruby-forum.com/t/rspec-cosa-ce-di-sbagliato/206703 "2011-05-07T19:12:51Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dubstep](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/cdc98d/32.png) [@dubstep](https://www.ruby-forum.com/u/dubstep)\
**Post date:** [May 7, 2011, 7:12pm UTC](https://www.ruby-forum.com/t/rspec-cosa-ce-di-sbagliato/206703/1 "2011-05-07T19:12:51Z")

</div>

Controller:

def search  
unless params[:data\_search].blank?  
shop\_data = params[:data\_search]  
@shops = Shop.data\_search(shop\_data).paginate(:per\_page =\>  
Settings.shops\_per\_page, :page =\> params[:page])  
else  
@shops = Shop.all.paginate(:per\_page =\> Settings.shops\_per\_page,  
:page =\> params[:page])  
end  
render :layout =\> false if request.xhr?  
end

controller.spec:

def mock\_shop(stubs={})  
@mock\_shop ||= mock\_model(Shop, stubs).as\_null\_object  
end

describe “search” do  
context “when name is ‘Test’” do  
it “should find shops” do  
@name = “Test”  
Shop.stub(:search).with(@name) { [mock\_shop] }  
get :search, :name =\> @name  
assigns(:shops).should eq([mock\_shop])  
end  
end  
end

La failure:

Failure/Error: assigns(:shops).should eq([mock\_shop])

```
  expected [#<Shop:0x9f4 @name="Shop_1032">]
       got []

  (compared using ==)

  Diff:
  @@ -1,2 +1,2 @@
  -[#<Shop:0x9f4 @name="Shop_1032">]
  +[]

```

Cosa sbaglio?

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [May 8, 2011, 2:59pm UTC](https://www.ruby-forum.com/t/rspec-cosa-ce-di-sbagliato/206703/2 "2011-05-08T14:59:03Z")

</div>

Fai lo stub di .search ma nel controller entri in questa condizione

> @shops = Shop.all.paginate(:per\_page =\> Settings.shops\_per\_page,  
> :page =\> params[:page])

Quindi dovresti fare lo stub di all.pagiante per ottenere il risultato  
che desideri.  
Se usi il mocking di rspec puoi usare stub\_chain. Prova con qualcosa  
tipo Shop.stub\_chain(:all, :paginate).and\_return([mock\_shop])

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [May 9, 2011, 1:54pm UTC](https://www.ruby-forum.com/t/rspec-cosa-ce-di-sbagliato/206703/3 "2011-05-09T13:54:46Z")

</div>

On 8 May 2011 14:58, Fabrizio R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Fai lo stub di .search ma nel controller entri in questa condizione
> 
> > @shops = Shop.all.paginate(:per\_page =\> Settings.shops\_per\_page,  
> > :page =\> params[:page])
> 
> Quindi dovresti fare lo stub di all.pagiante per ottenere il risultato che  
> desideri.  
> Se usi il mocking di rspec puoi usare stub\_chain. Prova con qualcosa tipo  
> Shop.stub\_chain(:all, :paginate).and\_return([mock\_shop])

Il problema era semplicemente nel parametro sbagliato, deve essere get  
:search, :data\_search =\> … e non :name =\> …  
Adesso funziona anche senza fare lo stub di paginate.
