非標準の一連のルートを介して到達するコントローラーのいくつかの基本的な側面をテストしようとしています。の適切なコントローラー/アクションに接続できないようですLessonsController
。これは、につながるように見えるリダイレクトされたルートを介して到達しCoursesController
ます。
仕様を実行すると、ルーティング エラーが発生するか、応答が空になり、有用なナゲットを解析する方法がわかりません。
# app/controllers/lessons_controller.rb
def index
... set some instance vars ...
end
# The CoursesController has index and show methods of its own which aren't used here
# app/config/routes.rb
...
get 'courses/:course_name' => redirect('/courses/%{course_name}/lessons'), :as => "course"
get 'courses/:course_name/lessons' => 'lessons#index', :as => "lessons"
...
# spec/controllers/courses_controller_spec.rb
describe CoursesController do
it "test some instance vars" do
get :show, :course_name => Course.first.title_url
assigns(:some_ivar).should_not be_empty
end
end
エラー:
AbstractController::ActionNotFound: The action 'course' could not be found for CoursesController
RSpec 試行 #2:
# spec/controllers/courses_controller_spec.rb
...
get :course, :course_name => Course.first.title_url
...
試み #2 エラー:
NoMethodError: undefined method `empty?' for nil:NilClass
lessons_controller_spec.rb
代わりにファイルから開始することで同様の試行錯誤アプローチを実行すると(たとえばget :index
、そこで試行するなど)、同様のエラーが発生します。には直接ルートは設定されてlessons#index
おらず、リダイレクトのみが設定されています。
2 番目の例の応答オブジェクトは巨大なので (本体は空ですが)、誰かが有用だと思わない限り含めません。
私は間違いなく非RESTfulアーキテクチャを後悔していますが、それが何であるかを考えると、コントローラの仕様を取得して内部の適切なアクションをターゲットにする方法はありますLessonsController
か?
レール 3.2.12、RSpec 2.14.4、カピバラ 2.0.2