我有使用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)
我是否应该以某种方式将路线划入测试环境?我不确定我错过了什么,因为它看起来像所有的碎片都在那里。
答案 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"}
指的是与此路线相关的controller
和action
。但是您需要:id
参数才能正确创建此路径的路径。
No route matches {:action=>"show", :controller=>"movies"}
此处{:action=>"edit", :controller=>"movies"}
指的是尝试创建路径路径时给出的选项。
我会确保您的mov
不是零,并返回正确的Movie
记录。