gpt4 book ai didi

ruby-on-rails - 嵌套资源中带有参数的 RSpec 路由测试问题

转载 作者:数据小太阳 更新时间:2023-10-29 07:28:43 26 4
gpt4 key购买 nike

我有一个奇怪的问题.. rspec 在 spec/routing 中生成了一个名为 menus_routing_spec.rb 的类

测试失败,因为菜单是餐厅的嵌套资源。

这是我的测试:

    describe MenusController do

before :each do
@restaurant = FactoryGirl.create(:random_restaurant)
@menu = FactoryGirl.create(:menu)
end

describe 'routing' do
it 'routes to #index' do
params = {}
params['restaurant_id'] = @restaurant


#get('/restaurants/:restaurant_id/menus').should route_to('menus#index')
#get(restaurant_menus_path(@restaurant)).should route_to('menus#index')
#get(restaurant_menus_path, { :restaurant_id => @restaurant }).should route_to('menus#index')

get restaurant_menus_path, { :restaurant_id => @restaurant.to_param }
expect(response).should route_to('menus#index')
end

rake 路由中的路径如下所示:

restaurant_menus_path    GET     (/:locale)/restaurants/:restaurant_id/menus(.:format)   menus#index

我总是收到这个错误信息:

Failure/Error: get restaurant_menus_path, @restaurant.to_param
ActionController::UrlGenerationError:
No route matches {:action=>"index", :controller=>"menus"} missing required keys: [:restaurant_id]

我也试过其他的..但同样的错误..有谁能看出我在哪里做错了吗?

这是 spec/controllers/menus_controller_spec.rb 中的一个测试,运行良好

it 'renders the index template' do
get :index, { :restaurant_id => @restaurant }
expect(response).to render_template('index')
end

非常感谢你的帮助

最佳答案

路由规范应该测试给定字符串路径(即“/first/1/second/2”)的操作 (get) 将路由到具有正确参数集的操作 (即 first_id: 1, id: 2)

您无需在此处创建模型的实例。这是不必要的,它只会减慢规范。

describe MenusController do
describe 'routing' do
it 'routes to #index' do
get('/restaurants/42/menus').should route_to('menus#index', restaurant_id: 42)
end

it 'routes to #show' do
get('/restaurants/42/menus/37').should route_to('menus#index', restaurant_id: 42, id: 37)
end
end
end

您还可以传入其他参数,如 format::json,或任何其他可能从 URL 字符串中收集到的参数,因为它主要测试您的路由文件是否将您定向到正确的位置使用正确的参数。

关于ruby-on-rails - 嵌套资源中带有参数的 RSpec 路由测试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21550367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com