在现有路线的rspec测试中找不到路线

时间:2015-02-16 22:35:31

标签: ruby-on-rails ruby rspec

rake路线显示:

 estimate_location GET      /estimate/location/:id(.:format)   estimate/location#show

我的rspec测试:

it 'should re-direct to location/new from show' do
  e = FactoryGirl.create :estimate
  get estimate_location_path e
  expect(response.status).to eq(302)
end

控制台说:

   Failure/Error: get estimate_location_path e
     ActionController::RoutingError:
       No route matches {:controller=>"estimate/location", :action=>"/estimate/location/1"}

这对我没有意义。有一条路线,我通过了一个对象(Rails巧妙地抓住了ID),但是它说没有这样的路径?

3 个答案:

答案 0 :(得分:3)

看起来你正在编写一个控制器规范(rails调用功能测试)

在这些测试中,getpost等方法期望第一个参数是操作的名称,第二个参数是选项的哈希 - 它们绕过路由(尽管它们会检查操作是可路由的)。你会改为

get :show, id: e.id

另一方面,在集成测试(请求规范或功能规范)中,您将使用实际路径(并且根据您使用的设置visitgetpost等等,但它们是不同的get方法)

答案 1 :(得分:0)

尝试重写测试

it 'should re-direct to location/new from show' do
  let(:estimate) {FactoryGirl.create(:estimate)}

  before {get estimate_location_path(estimate)}

  expect(response.status).to eq(302)
end

答案 2 :(得分:0)

我有同样的问题。使用Engine的应用程序在映射路线时没有问题,但是rspec找不到路线。

几小时后,我从以下位置重写了我的路线文件:

Authentication::Engine.routes.draw do namespace :api do namespace :v1 do post '/auth_token/:id', to: Authentication::Api::V1::AuthTokenController.action(:create), as: :auth_token end end end

Authentication::Engine.routes.draw do namespace :api do namespace :v1 do post '/auth_token/:id' => 'auth_token#create', as: :auth_token end end end

rspec似乎还不够聪明,无法对在第一个代码段中写回路由的方式进行反向工程。