2014-12-07 130 views
4

我與Web API工作在導軌4.1.8,我做了一些測試,但總是返回我Rspec的測試API版本

Failure/Error: post '/v1/users', subdomain: 'api', user: @user.to_json, format: :json 
ActionController::UrlGenerationError: 
    No route matches {:action=>"/v1/users", :controller=>"api/v1/users", :format=>:json, :subdomain=>"api", :user=>"JSON_OBJ"} 

,但如果我提前休息測試它在瀏覽器控制檯它的作品,我不知道我做錯了

這裏是我的代碼

的routes.rb

namespace :api, path: '/', constraints: {subdomain: 'api'}, defaults: { format: :json } do 
    namespace :v1 do 
    with_options except: [:edit, :new] do |except| 
     except.resources :users do 
     collection do 
      post 'login' 
      post 'showme' 
     end 
     end 
     except.resources :products 
     except.resources :locations 
    end 
    end 
end 

和我的控制器規格

module API 
    module V1 
    describe UsersController do 
    before do 
     request.host = "api.example.com" 
     expect({:post => "http://#{request.host}/v1/users"}).to(
      route_to(controller: "api/v1/users", 
        action: "create", 
        subdomain: 'api', 
        format: :json 
       ) 
     ) # => PASS 

     # token expectations 
     @auth_token = allow(JWT::AuthToken).to(
      receive(:make_token).and_return("mysecretkey") 
     ) 
     expect(JWT::AuthToken.make_token({}, 3600)).to eq("mysecretkey") 
     end 
     describe "Create User" do 
     before(:each) do 
      @user = FactoryGirl.attributes_for :user 
     end 

     it 'should return a token' do 
      post '/v1/users', subdomain: 'api', user: @user.to_json, format: :json # Error 
      response_body = JSON.parse(response.body, symbolize_names: true) 
      expect(response_body['token']).to eql "mysecretkey" 
     end 
     end 
    end 
    end 
end 

rake routes

login_api_v1_users POST /v1/users/login(.:format) api/v1/users#login {:format=>:json, :subdomain=>"api"} 

    showme_api_v1_users POST /v1/users/showme(.:format) api/v1/users#showme {:format=>:json, :subdomain=>"api"} 

    api_v1_users GET /v1/users(.:format)   api/v1/users#index {:format=>:json, :subdomain=>"api"} 

       POST /v1/users(.:format)   api/v1/users#create {:format=>:json, :subdomain=>"api"} 

    api_v1_user GET /v1/users/:id(.:format)  api/v1/users#show {:format=>:json, :subdomain=>"api"} 

       PATCH /v1/users/:id(.:format)  api/v1/users#update {:format=>:json, :subdomain=>"api"} 

       PUT /v1/users/:id(.:format)  api/v1/users#update {:format=>:json, :subdomain=>"api"} 

       DELETE /v1/users/:id(.:format)  api/v1/users#destroy {:format=>:json, :subdomain=>"api"} 
+0

如果您將'post'/ v1/users''更改爲'post api_v1_users',該怎麼辦? – 2014-12-07 16:45:43

+0

同樣的錯誤'沒有路線匹配{:行動=>「api_v1_users」,:控制器=>「API/V1 /用戶」,...}既不''後api_v1_users_url'也不''後api_v1_users_path' – sescob27 2014-12-07 17:00:52

回答