2013-02-22 2 views
0

테스트 RSpec에보석 versionist (경로 전략) 컨트롤러의 방법 "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 

제발, 날이 방법을 테스트하는 방법에 대해 조언을 줄?

루비 1.9.3 레일-3.2.12

+0

는 http://stackoverflow.com/questions/14586573/specs-for-controller-inside-a-module-versionist/14593358#14593358 이 사양은 컨트롤러의 사양이나 요구 사양이 발생한다? –

+0

오 감사합니다. 이것을 요청 사양으로 옮겼고 – Nitrino

답변

0

액션은 전체 경로, 작업의 이름 만 포함되어 있지 않습니다.

post :sign_up 

RSpec은 사용중인 컨트롤러를 기반으로 나머지 경로를 유추합니다. 오류 메시지에서 볼 수 있듯이 컨트롤러가 v3/users 인 것으로 파악되어 사용자의 조치가 취해졌으며 올바른 조치가 아닙니다.

+0

gem versionist를 사용했습니다. localhost : 3000/api/v3/users/sign_up 내가 게시물을 사용하는 경우 sign_up에 같은 오류가 발생합니다. 경로가 일치하지 않습니다 {: controller => "v3/users", : action => "sign_up" } – Nitrino

+0

잘 모르겠습니다. rspec 컨트롤러 사양은 요청 사양과 같은 미들웨어 스택을 통과하지 않기 때문에 경로를 사용하지 않습니다. 필수 매개 변수가 누락 되었습니까? – Cluster

+0

아니요, 색인에 요청을 보내더라도 동일한 오류가 발생합니다. – Nitrino