Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec路由匹配-预期与实际相同,但存在错误_Ruby On Rails_Json_Rspec - Fatal编程技术网

Ruby on rails Rspec路由匹配-预期与实际相同,但存在错误

Ruby on rails Rspec路由匹配-预期与实际相同,但存在错误,ruby-on-rails,json,rspec,Ruby On Rails,Json,Rspec,1) 示例控制器路由示例路由 失败/错误:预期(post:'/api/application')。将_路由到(格式:“json”,操作:“创建_应用程序”,控制器:“示例”) 识别的选项“json”、“action”=>“create_application”、“controller”=>“example”}>没有显示 匹配“json”,“操作”=>“创建应用程序”, “控制器”=>“示例”}> 差异: “json”,“操作”=>“创建应用程序”, “控制器”=>“示例”}> 预料之中,但事实并

1) 示例控制器路由示例路由 失败/错误:预期(post:'/api/application')。将_路由到(格式:“json”,操作:“创建_应用程序”,控制器:“示例”) 识别的选项“json”、“action”=>“create_application”、“controller”=>“example”}>没有显示 匹配“json”,“操作”=>“创建应用程序”, “控制器”=>“示例”}>

差异:

“json”,“操作”=>“创建应用程序”, “控制器”=>“示例”}>

预料之中,但事实并非如此

“json”,“操作”=>“创建应用程序”, “控制器”=>“示例”}>

我是不是遗漏了什么?我觉得预期的和实际的是一样的

@查尔斯

routes.rb:

scope '/api', :defaults => { format: 'json' } do
  resource :application, only:[] do
    post :create, to: 'example#create_application'
  end
end
耙道:

应用程序POST/api/应用程序(:格式)示例#创建#应用程序 {:format=>“json”}

现在与以下方面合作:

describe "routes for Example" do   
  it "routes" do
    expect( post: '/api/application').to route_to( "example#create_application", :format=>"json" )   
  end 
end

我也有同样的问题

您只需要在route_中添加hash,就可以像这样运行

it 'routes to /v1/auth to user_token#create' do
  expect(:post => '/v1/users/auth.json').to route_to({"format"=>"json", "controller"=>"v1/sessions", "action"=>"create"})
end
如上所述

我也有同样的问题

我的控制器是:
api/v1/users

我的路线定义如下:

Rails.application.routes.draw do
  namespace :api, defaults: { format: :json } do
    namespace :v1 do
      resources :users
    end
  end
end
我是这样定义我的规范路线的:

RSpec.describe Api::V1::UsersController, type: :routing do
  describe "routing" do
    it "routes to #index" do
      expect(get: "api/v1/users").to route_to(controller: :api/v1/users, action: :index)
    end
  end
end
但每次我遇到错误时:

识别的选项“json”、“action”=>“index”、“controller”=>“api/v1/users”}>与“index”、“controller”=>“api/v1/users”}>不匹配

我是这样修复的:

我只是根据以下内容修改了规范路径

RSpec.describe Api::V1::UsersController, type: :routing do
  describe "routing" do
    it "routes to #index" do
      expect(get: "api/v1/users").to route_to(controller: :api/v1/users, action: :index)
    end
  end
end
为此:

RSpec.describe Api::V1::UsersController, type: :routing do
  describe "routing" do
    it "routes to #index" do
      expect(get: "api/v1/users").to route_to(format: :json, controller: "api/v1/users", action: "index")
    end
  end
end
就这些


我希望这会有所帮助

您能向我们展示您的路由文件中的相关部分以及运行rake路由时的相关部分吗?上面添加了。谢谢Charles。如果您更改为
expect(post:'/api/application.json')
,它通过了吗?这也是我最好的猜测。