2

我是rails新手,我正在使用unit:test。我有一個動作在我的控制器如何在rails 3.1和unit中編寫功能測試用例: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 

和我的測試情況如下

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 

這種方法是POST方法。當運行這個測試,它失敗並顯示我的消息

「應該保存campagin(0.07s) 期望的迴應是一個重定向到http://test.host/dashboard但被重定向到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」

我的猜測是,我我沒有給它正確的斷言檢查參數

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

我該如何編寫這樣的斷言來檢查這些屬性,檢查一個參數是否爲空。如何找到一個給定ID的對象。

回答

1

對於功能測試,你不應該在乎測試模型,這是你的情況,你應該刪除:

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

要在功能測試就知道那是什麼,如果頁面加載,正確重定向。

在你的控制器,你有PARAMS條件檢查,所以對於每個檢查的結果如何,你寫測試中的每個,那就是你必須寫兩個功能測試:

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 

的訣竅準備後的參數是使用方法to_params的方法。

希望得到這個幫助。

UPDATE:如果你只是想檢查是否params[:app_id] GET參數是在URL中,你應該檢查該存在的,而不是檢查,如果它是不是空白:

if params[:app_id] 

else 

end 
+0

感謝忠爲回答,對不起,我沒有意識到你的迴應,這就是爲什麼在幾個月後接受它。 – user1014473 2012-08-03 11:21:21

相關問題