2

私はレールのテストに不慣れで、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 メソッドです。このテストの実行中に失敗し、メッセージが表示されます

"キャンペーンを保存する必要があります (0.07 秒) http://test.host/dashboardへのリダイレクトであると予想された応答が、 http: //test.host/ /home/nouman/.rvm/gems/ruby-1.9へのリダイレクトでした.2-p290@global/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 を持つオブジェクトを見つける方法を教えてください。

4

1 に答える 1

1

機能テストの場合、モデルのテストを気にする必要はありません。つまり、あなたの場合は削除する必要があります。

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

機能テストで知りたいことは、ページがロードされた場合、正しくリダイレ​​クトされることです。

コントローラーにはパラメーターの条件チェックがあるため、チェックの結果ごとにそれぞれテストを作成します。つまり、2 つの機能テストを作成する必要があります。

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メソッドを使用することです。

この助けを願っています。

更新: GET パラメータが URL に含まれているかどうかを確認するparams[:app_id]だけの場合は、空白かどうかを確認するのではなく、この存在を確認する必要があります。

if params[:app_id]

else

end
于 2012-04-18T23:21:40.227 に答える