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

路由.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 回答