在现有路线的 rspec 测试中未找到路线
No route found in rspec test for an existing route
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),但是它说没有这样的路径??
尝试重写你的测试
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
看起来您正在编写控制器规范(rails 调用功能测试)
在这些测试中,get
、post
等方法期望第一个参数是操作的名称,第二个参数是选项的哈希值——它们会绕过路由(尽管它们会检查该操作是可路由的)。你会做
get :show, id: e.id
另一方面,在集成测试(请求规范或功能规范)中,您将使用实际路径(并且根据设置,您将使用 visit
或 get
、post
等,但它们会有所不同 get
方法)
我遇到了同样的问题。使用引擎的应用在映射路线时没有问题,但 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 不够聪明,无法对第一个片段中写回控制器的路由的方式进行逆向工程。
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),但是它说没有这样的路径??
尝试重写你的测试
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
看起来您正在编写控制器规范(rails 调用功能测试)
在这些测试中,get
、post
等方法期望第一个参数是操作的名称,第二个参数是选项的哈希值——它们会绕过路由(尽管它们会检查该操作是可路由的)。你会做
get :show, id: e.id
另一方面,在集成测试(请求规范或功能规范)中,您将使用实际路径(并且根据设置,您将使用 visit
或 get
、post
等,但它们会有所不同 get
方法)
我遇到了同样的问题。使用引擎的应用在映射路线时没有问题,但 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 不够聪明,无法对第一个片段中写回控制器的路由的方式进行逆向工程。