0

Rails 3アプリケーションがあり、すべてのルーティングのテストを作成しようとしています。

この非常に単純なルートを想像してみてください。

resources :jobs, :constraints => {:id => /\d+/}

これをテストしたいと思います。私の機能テストでは、Railsに組み込まれているアサーションを使用してアサーションを作成するのは簡単です。

assert_routing "jobs/4", { :controller => "jobs", :action => "show", :id => "4" }

ネガティブを主張する最良の方法は何ですか?つまり、制約に失敗した「ジョブ/ウィブル」はルーティングされておらず、エラーを返しているのでしょうか。「assert_not_routing」などを実装する簡単な方法はありますか?誰かがこれを以前に扱ったことがありますか?

4

2 に答える 2

1

最終的に見つけた解決策は、機能テストで有効な URL のルーティングをテストし、統合テストで無効な URL の非ルーティングをテストすることです。

RoutesTest という新しい統合テスト クラスを作成し、そこに、どこにもルーティングしてはならないすべての URL を格納します。

require 'test_helper'

class RoutesTest < ActionDispatch::IntegrationTest
  test "broken routes don't work" do
    assert_raise(ActionController::RoutingError) {
      get "/jobs/wibble"
    } 
  end
end

機能テストで有効なルートをテストします。ここでいくつかのテスト理論が失敗している可能性が最も高いです.ユニット対統合対機能のアイデアのどこに特定のテストを配置すべきかについて、私たちが思いつく恣意的でかなりばかげた理論では、それは少し奇妙に思えます. しかし、私は人々と神学をテストすることについて議論するよりも、仕事を終わらせたいと思っています. これが私がやっている方法です。

于 2012-07-04T09:39:12.747 に答える
0

パスの nil ルートをアサートしようとしましたか?

于 2012-07-03T22:11:57.257 に答える