|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2006
Messaggi: 557
|
[RSpec/Rails] Verifica metodo controller
Ciao a tutti,
sto utilizzando Rspec da poco per effettuare i test sulle applicazioni Rails e mi trovo un po' in difficolta' nella situazione in cui devo semplicamente verificare il funzionamento corretto di un metodo del controller. Il metodo (checkout) come prima operazione effettua una ricerca dei prodotti dove "quantity" sia diverso da nil: Codice:
@products=Product.find(:all, :conditions => "quantity IS NOT NULL") Per effettuare il test, nella spec del controller richiamo il metodo mediante controller.nome_metodo e mi aspetto che il valore di @total sia 6 , esempio: Codice:
describe ProductsController do describe "Vengono scelti dei prodotti" do it "dovrebbe restituire la somma" do controller.checkout assigns(:total).should == 6 end end end Naturalmente il db reale dell'applicativo non contiene alcun tipo di dati e quindi la query non restituisce alcun risultato (@products = nil) per questo ho implementato un DB finto grazie a Factory Girl: Codice:
Factory.define :product do |a| a.add_attribute :id, 1 a.add_attribute :name, 'test' a.add_attribute :price, 2 a.add_attribute :quantity, 3 end Codice:
describe ProductsController do describe "Verifica factory girl" do it "name dovrebbe essere test" do product = Factory(:product) product.name.should == "test" end end end La mia domanda e': come posso fare in modo che la query presente nel controller venga eseguita sul db di test/finto di factory girl invece che sul modello activerecord?o forse dovrei indicare in qualche modo al modello di interagire con factory girl invece del db reale? Spero di essere stato chiaro ![]() Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2006
Messaggi: 557
|
ps: il test se eseguito con i valori prelevati dal db reale funziona correttamente ma non e' questo il modo corretto di testare l'applicativo
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2006
Messaggi: 557
|
Mi auto rispondo perche' ho trovato la soluzione e potrebbe tornare utile a qualcuno.
Il test corretto e' in realta' banale: Codice:
@product = [Factory.build(:product)] Product.stub!(:find).and_return(@product) get :checkout, :params => @product assigns(:total).should == 2 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:49.