我正在尝试测试通过一组非标准路由到达的控制器的一些基本方面。我似乎无法连接到我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
,只有重定向。
我的第二个示例中的响应对象是巨大的(尽管主体是空的),所以除非有人认为它有用,否则我不会包含它。
我肯定对非 RESTful 架构感到遗憾,但考虑到它是什么,是否知道如何让控制器规范针对LessonsController
?
Rails 3.2.12、RSpec 2.14.4、Capybara 2.0.2