Ruby on rails 我需要帮助在rails中编写rspec测试
我有一个项目\u controller.rbRuby on rails 我需要帮助在rails中编写rspec测试,ruby-on-rails,ruby,ruby-on-rails-3,rspec,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,我有一个项目\u controller.rb def get_serialized_copy_of_item @item= Item.find_by_id(params[:id]) if @item.nil? head :no_content else respond_to do |format| serialized_item = @item.as_json(include: [:test1, :test2, :test3, :
def get_serialized_copy_of_item
@item= Item.find_by_id(params[:id])
if @item.nil?
head :no_content
else
respond_to do |format|
serialized_item = @item.as_json(include: [:test1, :test2, :test3, :test4])
format.html
format.json { render json: serialized_item }
end
end
end
routes.rb
namespace :items do
get '/get_serialized_copy_of_item/:id', to:'items#get_serialized_copy_of_item'
end
我想写一个rspec测试
require 'spec_helper'
describe Items::ItemsController do
describe "GET items#get_serialized_copy_of_item" do
it "renders 204 status code" do
get "/items/get_serialized_copy_of_item/dfsdf"
expect(last_response.status).to eq(204)
end
end
end
错误:我得到路由错误
F
Failures:
1) Items::ItemsController GET items#item renders 204 status code
Failure/Error: get "/items/get_serialized_copy_of_item/dfsdf"
ActionController::RoutingError:
No route matches {:controller=>"items/items", :action=>"/items/get_serialized_copy_of_item/dfsdf"}
# ./spec/controllers/items/items_controller_spec.rb:6:in `block (3 levels) in <top (required)>'
Finished in 0.01576 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/controllers/items/items_controller_spec.rb:5 # Items::itemsController GET items#item renders 204 status code
感谢RSpec采用测试名称中的控制器名称。请注意以下示例: 这里RSpec已经知道路径的
小部件
部分,因为descripe-WidgetsController
,所以get
方法只将:index
作为参数
要将其转化为您的案例:
describe Items::ItemsController do
describe "GET get_serialized_copy_of_item" do
it "renders 204 status code" do
get :get_serialized_copy_of_item, id: 'sdf'
expect(response.status).to eq(204)
end
end
end
get()
方法,而不需要传递整个路径:id
参数作为get()
名称空间
在这里进行路由是错误的。尝试将路线定义更改为:➜ bundle exec rake routes
Prefix Verb URI Pattern
Controller#Action
get_serialized_copy_item GET /items/:id/get_serialized_copy(.:format) items#get_serialized_copy
为此,您希望在
app/controllers/items\u controller.rb
RSpec中使用测试名称中的ItemsController
。请注意以下示例:
这里RSpec已经知道路径的小部件
部分,因为descripe-WidgetsController
,所以get
方法只将:index
作为参数
要将其转化为您的案例:
describe Items::ItemsController do
describe "GET get_serialized_copy_of_item" do
it "renders 204 status code" do
get :get_serialized_copy_of_item, id: 'sdf'
expect(response.status).to eq(204)
end
end
end
get()
方法,而不需要传递整个路径:id
参数作为get()
名称空间
在这里进行路由是错误的。尝试将路线定义更改为:➜ bundle exec rake routes
Prefix Verb URI Pattern
Controller#Action
get_serialized_copy_item GET /items/:id/get_serialized_copy(.:format) items#get_serialized_copy
为此,您希望在
app/controllers/items\u controller.rb中安装ItemsController
,从我看到的情况来看,没有任何嵌套
如果是这样,您应该调用ItemsController
,而不是Items::ItemsController
项目\u控制器\u规格:
require 'spec_helper'
describe ItemsController do
describe "GET #get_serialized_copy_of_item" do
it "renders 204 status code" do
get "/items/get_serialized_copy_of_item/dfsdf"
expect(last_response.status).to eq(204)
end
end
end
据我所见,没有任何筑巢
如果是这样,您应该调用ItemsController
,而不是Items::ItemsController
项目\u控制器\u规格:
require 'spec_helper'
describe ItemsController do
describe "GET #get_serialized_copy_of_item" do
it "renders 204 status code" do
get "/items/get_serialized_copy_of_item/dfsdf"
expect(last_response.status).to eq(204)
end
end
end
我试过了,但我也犯了同样的错误。我还尝试了descripe ItemsController
这个答案在我看来是正确的。您是否仍然得到以下信息:没有路由匹配{:controller=>“items/items”,:action=>“/items/get_serialized_copy_of_item/dfsdf”}
?@JagdeepSingh,yesActionController::RoutingError:没有路由匹配{:id=>“sdf”,:controller=>“items/items”,:action=>“get_serialized_拷贝_of_item”}
@kavin这绝对不是以前的错误。请注意,问题仍然是:controller
部分:它表示没有与controller项/项匹配的路由。因此,您的路由和/或名称空间有问题things@kavin我在回答的最后补充了更多关于如何修复路线的内容。我试过了,但也遇到了同样的错误。我还尝试了descripe ItemsController
这个答案在我看来是正确的。您是否仍然得到以下信息:没有路由匹配{:controller=>“items/items”,:action=>“/items/get_serialized_copy_of_item/dfsdf”}
?@JagdeepSingh,yesActionController::RoutingError:没有路由匹配{:id=>“sdf”,:controller=>“items/items”,:action=>“get_serialized_拷贝_of_item”}
@kavin这绝对不是以前的错误。请注意,问题仍然是:controller
部分:它表示没有与controller项/项匹配的路由。因此,您的路由和/或名称空间有问题things@kavin我在回答的末尾添加了更多关于如何修复路由的内容。能否将bundle exec rake routes
的输出添加到问题的末尾?@64位已添加。能否将bundle exec rake routes
的输出添加到问题的末尾“你的问题?”六十四位补充道。