2010-07-23 13 views
1

Le code ci-dessous:@Controller est nul lors du test de suppression: détruire avec Shoulda

context "should destroy participation" do 
    setup do 
     @p = Factory.create :participation 
     delete :destroy, :id => @p.id.to_param 
    end 

    should_redirect_to(:controller => 'configuration', :action => 'edit') 
    end 

me donne l'erreur ci-dessous, toute idée pourquoi?

RuntimeError: @controller is nil: make sure you set it in your test's setup method. 
    /test/functional/participation_controller_test.rb:30:in `__bind_1279893888_614853' 
    /Applications/RubyMine 2.0.2.app/rb/testing/patch/testunit/test/unit/ui/testrunnermediator.rb:36:in `run_suite' 
    /Applications/RubyMine 2.0.2.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:215:in `start_mediator' 
    /Applications/RubyMine 2.0.2.app/rb/testing/patch/testunit/test/unit/ui/teamcity/testrunner.rb:191:in `start' 
+0

Le problème était la classe de test a été ParticipationTest au lieu de ParticipationsTest. Voir ce post: http://jeffperrin.com/2009/05/18/rails-functional-testing-gotcha/ – rtacconi

Répondre

1

Vous devez conclure should_redirect_to en fonction, en ce moment il est exécuté lorsque la classe est chargée par le rubis.

context "should destroy participation" do 
    setup do 
    @p = Factory.create :participation 
    end 

    should "redirect ...." do 
    delete :destroy, :id => @p.id.to_param 
    should_redirect_to(:controller => 'configuration', :action => 'edit') 
    end 
end 
+0

J'ai essayé mais je reçois toujours la même erreur – rtacconi

2

Vous nom non pluriel pour le test, mais le contrôleur est ParticipationsController:

/test/functional/participation_controller_test.rb

Modifier le nom de classe et le nom de:

ParticipationsControllerTest

participations_controller_test.rb

0

existe-t-contrôleur? Dans mon cas, le contrôleur n'existait pas, puis rails chargé sans contrôleur et m'a jeté l'erreur que vous obtenez.