2

Ich bin neu auf Schienen testen und ich verwende Unit: Test. Ich habe eine Aktion in meinem ControllerWie schreibe ich einen funktionalen Testfall in Schienen 3.1 und Einheit: Test

def save_campaign 
     unless params[:app_id].blank? 
     @app = TestApp.find(params[:app_id]) 
      if params[:test_app] 
      @app.update_attributes(params[:test_app]) 
      end 
     flash[:notice] = "Your Registration Process is completed" 
     redirect_to "/dashboard" 
     else 
    redirect_to root_path 
    end 
    end 

und mein Testfall ist, wie folgend

test "should save campagin " do 
assert_difference('TestApp.count', 0) do 
      post :save_campaign, test_app: @test_app.attributes 
     end 
     assert_redirected_to "/dashboard" 
     end 
    end 

Diese Methode ist eine post-Methode. Während dieses Test läuft, wird es versagen und mir

eine Meldung angezeigt

„sollte Campagin (0.07s) Erwartete Antwort speichert eine Umleitung auf http://test.host/dashboard zu sein, aber war eine Umleitung zu http://test.host/ /home/nouman/.rvm /gems/[email protected]/gems/actionpack-3.1.3/lib/action_dispatch/testing/assertions/response.rb:67:in `assert_redirected_to‘

Meine Vermutung ist, dass ich Ich gebe es nicht richtig Behauptung zu überprüfen Parameter

params [: app_id] und @app = TestApp.find (params [: app_id]).

Wie kann ich eine solche Assertion schreiben, um diese Attribute zu überprüfen, prüfen, ob ein Parameter leer ist. Wie kann ich ein Objekt mit einer bestimmten ID finden?

Antwort

1

Für Funktionstest, sollten Sie nicht kümmern sich um das Modell zu testen, dass in Ihrem Fall ist, sollten Sie entfernen:

assert_difference('TestApp.count', 0) do 
.. 
end 

Was möchten Sie in einem Funktionstest wissen, dass, wenn die Seite geladen ist , richtig umgeleitet.

In Ihrem Controller haben Sie eine Bedingungsprüfung für params, so dass für jede über das Ergebnis der Prüfung, können Sie einen Test jeder schreiben, also zwei Funktionstests schreiben:

test "if app_id param is empty, #save_campaign redirect to root" do 
    post :save_campaign, :app_id => nil 
    assert_redirected_to root_path 
end 

test "#save_campaign" do 
    post :save_campaign, :app_id => app_fixture_id, :test_app => @test_app.attributes.to_params 
    assert_redirected_to '/dashboard' 
end 

Die Trick zur Vorbereitung der Post-Params ist die Methode to_params Methode zu verwenden.

Hoffe diese Hilfe.

UPDATE: Wenn Sie wollen einfach nur überprüfen, ob params[:app_id] GET param in der URL ist, sollten Sie für diese Präsenz überprüfen nur statt zu überprüfen, ob es leer ist oder nicht:

if params[:app_id] 

else 

end 
+0

Dank Trung für die Antwort, Entschuldigung, ich war mir Ihrer Antwort nicht bewusst, deshalb akzeptiere ich sie nach ein paar Monaten. – user1014473

Verwandte Themen