2009-07-29 6 views
1

Je développe le test pour REST en utilisant shoulda et factory_girl. Code ci-dessoustester REST avec shoulda et factory_girl - détruire

context "on :delete to :destroy" do 
    setup do 
     @controller = NewsArticlesController.new 
     @request = ActionController::TestRequest.new 
     @response = ActionController::TestResponse.new 

     @news_article = Factory.create(:news_article) 

    end 

    should "destroy new NewsArticle" do 
     assert_difference('NewsArticle.count', -1) do 
     delete :destroy, :id => @news_article.id 
     end 
    end 

    should_redirect_to news_articles_path 
    end 

suite i voir

1) Error: 
test: on :delete to :destroy should redirect to index. (NewsArticlesControllerTest): 
ArgumentError: block not supplied 
    c:/develop/ruby/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/action_controller/macros.rb:201:in `instance_eval' 
    c:/develop/ruby/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/action_controller/macros.rb:201:in `__bind_1248853182_16800 
0' 
    c:/develop/ruby/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call' 
    c:/develop/ruby/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: on :delete to :destroy should redirect to index. ' 

Pourriez-vous me dire plz - ce qui est erroné et comment je peux modifier test pour les faire fonctionner à droite?

UPD: routes semble bien

news_articles GET /news(.:format)     {:controller=>"news_articles", :action=>"index"} 

Répondre

1

Peut-être que vous devriez utiliser un symbole et méthode de post lors de l'appel supprimer:

assert_difference 'Article.count', -1 do 
    post :delete, :id => ... 
    end 

(référencé à partir http://api.rubyonrails.org/classes/ActiveSupport/Testing/Assertions.html#M001427)

+0

Non, assert_difference fonctionne très bien, mais comme vous pouvez le voir dans les journaux fournis - il y a un problème should_redirect_to news_articles_path –

+0

Pourriez-vous me montrer votre contrôleur fichier? – Lichtamberg

+0

Je pense que vous n'êtes pas redirigé vers l'index après la suppression? ou vous? – Lichtamberg

5

Le problème est avec should_redirect_to qui utilise maintenant le bloc pour évaluer le code de redirection. Malheureusement, ni le wiki de thinkbot, ni le readme de github ne le reflètent et contiennent toujours les anciens exemples.

Le code correct est

should_redirect_to "news articles page" { news_articles_path } 

où le premier argument est une description textuelle (il n'eval'd qu'avec l'ancienne version) utilisée pour générer un nom de test, de sorte que vous obtenez un nom de test comme 'devrait rediriger vers des articles de presse page'

Questions connexes