Ruby Cucumber表示,当Rake Routes表明路径存在时,路径找不到路线

时间:2012-03-22 18:08:19

标签: ruby path routes cucumber rake

我有使用Cucumber的Ruby on Rails。已经为测试环境迁移了db,我可以使用sqliteman查看它。问题是,虽然rake路线显示了我想要的路线,但是黄瓜会返回一个错误,说明路线不存在。

路线是:

    movies GET    /movies(.:format)          {:action=>"index", :controller=>"movies"}
           POST   /movies(.:format)          {:action=>"create", :controller=>"movies"}
 new_movie GET    /movies/new(.:format)      {:action=>"new", :controller=>"movies"}
edit_movie GET    /movies/:id/edit(.:format) {:action=>"edit", :controller=>"movies"}
     movie GET    /movies/:id(.:format)      {:action=>"show", :controller=>"movies"}
           PUT    /movies/:id(.:format)      {:action=>"update", :controller=>"movies"}
           DELETE /movies/:id(.:format)      {:action=>"destroy", :controller=>"movies"}

然后,在同一个提示框中,我运行“bundle exec cucumber”并在同一个功能文件中的两个不同场景中得到此错误:

No route matches {:action=>"show", :controller=>"movies"} (ActionController::RoutingError)
No route matches {:action=>"edit", :controller=>"movies"} (ActionController::RoutingError)

feature / support / paths.rb文件在调用* movie_path *和* edit_movie_path *的两行上失败

when /^the details page for (.*)/
  mov= Movie.find_by_title($1)
  movie_path(mov)
when /^the edit page for (.*)/
  mov= Movie.find_by_title($1)
  edit_movie_path(mov)

我是否应该以某种方式将路线划入测试环境?我不确定我错过了什么,因为它看起来像所有的碎片都在那里。

3 个答案:

答案 0 :(得分:3)

这将是这样的:

when /the edit page for "(.*)"/
    movie= Movie.find_by_title($1)
    edit_movie_path(movie)

但你也可以使用它:

   when /the edit page/
        edit_movie_path(Movie.first)

答案 1 :(得分:1)

我怀疑Movie.find_by_title($1)找不到您期望的任何内容,而mov的结果为nil,因此无法找到它的路由,因为没有ID。

您可以通过向!添加find_by_title来更明显地这样做,以便在找不到任何内容时引发异常:

when /^the details page for (.*)$/
  movie = Movie.find_by_title!($1)
  edit_movie_path(mov)
end

答案 2 :(得分:0)

edit_movie GET    /movies/:id/edit(.:format) {:action=>"edit", :controller=>"movies"}

此处{:action=>"edit", :controller=>"movies"}指的是与此路线相关的controlleraction。但是您需要:id参数才能正确创建此路径的路径。

No route matches {:action=>"show", :controller=>"movies"}

此处{:action=>"edit", :controller=>"movies"}指的是尝试创建路径路径时给出的选项。

我会确保您的mov不是零,并返回正确的Movie记录。