2010-09-27 4 views
0

Nous savons tous que nous avons ce code dans notre action de créer un contrôleur de baseComment tester cette ==> rspec + rails

def create 
    if @product.save 
     flash[:notice] = 'Product was successfully created.' 
     redirect_to(products_path) 
    else 
     flash[:notice] = "Data not saved try again" 
     render :action => "new" 
    end 
end 

comment testons-nous cette partie du code à l'aide rspec

Toutes les suggestions sont les bienvenues.

PS Je suis naïf rspec alors s'il vous plaît me dérange pose cette question si la réponse à cette question est sacrément simple :)

Répondre

2

Le remarkable-rails gem ajoute quelques matchers à rspec que vous pouvez utiliser pour tester les avis, les redirections, et & c. Ce (non testé) product_controller_spec.rb montre comment vous pouvez utiliser remarkable_rails Matchers pour tester l'extrait de code:

describe ProductController do 

    describe "create" do 

    before(:each) do 
     @product = products(:window_cleaner) 
    end 

    it "should create a product" do 
     @product.should_receive(:save).and_return(true) 
     post :create 
     should set_the_flash :notice, 
          :to => 'Production was successfully created.' 
     should redirect_to products_path 
    end 

    it "should handle failure to create a product" do 
     @product.should_receive(:save).and_return(false) 
     post :create 
     should set_the_flash :notice, :to => 'Data not saved try again.' 
     should render_template :action => 'new' 
    end 

    end 

end 

remarquables rails, à condition que les render_template set_the_flash et matchers de redirect_to utilisés ci-dessus.

+0

pouvons-nous utiliser la méthode should_receive (: save) en utilisant à peine rspec ou est-il nécessaire d'utiliser la gem – Rohit

+0

@Rohit, Vous pouvez utiliser rspec seul pour simuler l'appel à Product.save. Cette partie est simple vieux rspec. –

+0

Je n'ai pas utilisé le plugin que vous avez recommandé à la place j'ai utilisé ce http://www.slideshare.net/fnando/testando-rails-apps-com-rspec pour tester la routine en particulier. Mais j'ai toujours le sentiment que votre chemin pourrait être bon. Donc, je donne un upvote. – Rohit

Questions connexes