如何用rspec测试slu ur的网址

时间:2014-08-11 12:20:31

标签: ruby-on-rails-4 rspec

我有一个rails应用程序,我使用了slugged url。我如何用Rspec测试这些网址。

rake路线正在产生以下结果

new_user_session GET    /login(.:format)                   sessions#new
    user_session POST   /login(.:format)                   sessions#create
            bays GET    /:slug/bays(.:format)              bays#index
                 POST   /:slug/bays(.:format)              bays#create
         new_bay GET    /:slug/bays/new(.:format)          bays#new
        edit_bay GET    /:slug/bays/:id/edit(.:format)     bays#edit
             bay GET    /:slug/bays/:id(.:format)          bays#show
                 PATCH  /:slug/bays/:id(.:format)          bays#update
                 PUT    /:slug/bays/:id(.:format)          bays#update
                 DELETE /:slug/bays/:id(.:format)          bays#destroy

现在,当我为bays控制器运行rpec时,我发现了以下错误。

 Failure/Error: get :index, {}, valid_session
 ActionController::UrlGenerationError:
   No route matches {:action=>"index", :controller=>"bays"}

使用

rspec-rails (3.0.1)
rails (4.0.0)

2 个答案:

答案 0 :(得分:1)

正如您所定义的那样...托架索引需要:slug参数。根据错误消息,您已经没有将slug传递给此路径。您必须通过:slug(例如get :index, :slug => "1234", valid_session)或重新定义路线以不需要它。

用于测试rspec中的路由...这是rspec的基本部分:rspec routing specs

在你的情况下它会是这样的:

{ :get => "/1234/bays" }.
  should route_to(
    :controller => "bays",
    :slug => "1234"
  )

答案 1 :(得分:0)

对于rspec 3.x,你可以选择:

  scenario 'get correct slug', :type => :routing do
    expect(get("/models/slug")).to route_to(:controller => "controller_name", :action => 'action_name', :id => "your_slug_name")
  end

注意阻止之前的type: :routing定义。

更多信息here