Rspec路线匹配 - 预期与实际相同,但错误

时间:2014-05-28 17:36:14

标签: ruby-on-rails json rspec

  

1)示例路由的ExampleController路由         失败/错误:期待(发布:' / api / application')。到route_to(格式:' json',操作:' create_application',控制器:&# 39;实施例')           已识别的选项< {"格式" =>" json","操作" =>" create_application","控制器" = GT;"例如"}>没有   匹配< {"格式" =>" json","操作" =>" create_application",   " controller" =>"示例"}>,

     

差:

     

< {"格式" =>" json","行动" =>" create_application",   "控制器" = GT;"例如"}>

     

预计但是

     

< {"格式" =>" json","行动" =>" create_application",   "控制器" = GT;"例如"}>

我在这里遗漏了什么吗?我觉得好像预期和实际是一样的。

@charles

routes.rb中:

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

rake routes:

  

应用程序POST /api/application(.:format)示例#create_application   {:格式=>" JSON"}

现在使用:

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

2 个答案:

答案 0 :(得分:0)

我有同样的问题。

你只需要在route_to函数中添加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

如上所述。

答案 1 :(得分:0)

我遇到了同样的问题。

我的控制器是: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

但是每次我遇到错误:

<块引用>

识别的选项 <{"format"=>"json", "action"=>"index", "controller"=>"api/v1/users"}> 与 <{"action"=> 不匹配“索引”,“控制器”=>“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

仅此而已。

我希望这会有所帮助