dawid999
27-09-2010, 13:21
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:
@products=Product.find(:all, :conditions => "quantity IS NOT NULL")
successivamente effettua un calcolo matematico sul prezzo di tutti i prodotti trovati,li somma e associa tale somma a @total
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:
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:
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
Il quale funziona perfettamente, infatti testando la seguente condizione:
describe ProductsController do
describe "Verifica factory girl" do
it "name dovrebbe essere test" do
product = Factory(:product)
product.name.should == "test"
end
end
end
il test va a buon fine.
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
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:
@products=Product.find(:all, :conditions => "quantity IS NOT NULL")
successivamente effettua un calcolo matematico sul prezzo di tutti i prodotti trovati,li somma e associa tale somma a @total
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:
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:
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
Il quale funziona perfettamente, infatti testando la seguente condizione:
describe ProductsController do
describe "Verifica factory girl" do
it "name dovrebbe essere test" do
product = Factory(:product)
product.name.should == "test"
end
end
end
il test va a buon fine.
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