0

コントローラーに「sign_up」というメソッドがあります

# controller/v3/users_controller
# POST api/v3/users/sign_up
def sign_up    
  user = User.new(params[:user])
  if user.save && user.update_attribute(:channel, "user_#{user.id}")
    render json: { Auth: { message: t(:sign_up_ok), user_id: user.id, channel: user.channel } }, status: 201
  else
    render json: { errors: Oj.load(user.errors.to_json) }, status: 400
  end
end

route.rb

api_version(module: 'V3', path: 'api/v3') do
  resources :users, only: [:index, :show, :destroy] do
    collection do
    post 'sign_up'
    post 'sign_in'
  end
end

私はそれをテストしようとしています:

require 'spec_helper'
describe V3::UsersController do
  describe "POST 'sign_up'" do
    it "should be successful" do
      post '/api/v3/users/sign_up'
      assert_response 200
    end
  end
end

エラーを取得します。

V3::UsersController POST 'sign_up' should be successful
  Failure/Error: post '/api/v3/users/sign_up'
  ActionController::RoutingError:
    No route matches {:controller=>"v3/users", :action=>"/api/v3/users/sign_up"}
 # ./spec/controllers/v3/user_controller_spec.rb:7:in `block (3 levels) in <top (required)>'

レーキルート

sign_up_api_v3_users POST    /api/v3/users/sign_up(.:format)     V3/users#sign_up

この方法をテストする方法を教えてください。

ruby-1.9.3 rails-3.2.12

4

1 に答える 1

0

アクションにはフル パスを含める必要はなく、アクションの名前のみを含める必要があります。

post :sign_up

RSpec は、使用しているコントローラーに基づいて残りのパスを推測します。エラー メッセージでわかるように、コントローラは v3/users であることがわかり、有効なアクションではないアクションを実行しました。

于 2013-02-22T11:32:57.287 に答える