2011-07-12 4 views
28

カスタム機能を実装するためにDevise::RegistrationsControllerを上書きしたいと思います。登録コントローラーを無効にするときのコントローラーテストの書き方は?

# /app/controllers/registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 
    def new 
    super 
    end 
end 

と、このような私のルートを設定します:これを行うには、私はそうのような新しいRegistrationsController作成した

devise_for :users, :controllers => { :registrations => "registrations" } 

をし、このようにそれをテストしてみました:

describe RegistrationsController do 
    describe "GET 'new'" do 
    it "should be successful" do 
     get :new 
     response.should be_success 
    end 
    end 
end 

しかしそれは私にエラーを与える:

1) RegistrationsController GET 'new' should be successful 
Failure/Error: get :new 
AbstractController::ActionNotFound: 
    Could not find devise mapping for path "https://stackoverflow.com/users/sign_up". 
    Maybe you forgot to wrap your route inside the scope block? For example: 

     devise_scope :user do 
     match "/some/route" => "some_devise_controller" 
     end 
# ./spec/controllers/registrations_controller_spec.rb:13:in `block (3 levels) in <top (required)>' 

どうしたの?

答えて

46

問題は工夫が元のコントローラにテストからのルートをマップすることができないということです。つまり、ブラウザで開くとアプリが正常に動作しますが、コントローラのテストは失敗します。

ソリューションはそうのような各試験の前に、要求に工夫マッピングを追加することです:私が持っているものだ

before :each do 
    request.env['devise.mapping'] = Devise.mappings[:user] 
end 
+0

これをどのファイルに追加しますか - 私はそれを把握できません、ありがとう。 – eWizardII

+0

最初の 'describe'ブロックのちょうど内側のコントローラテストに入れます。 - スペックで –

+0

私はコントローラを無駄に次のように私はそれを置く場所registration_controllerがされてい: は「spec_helper」を必要と は前 を行う「『編集』をGET」について説明しますRegistrationsControllerについて説明します。それぞれが[ request.envを行います'devise.mapping'] = Devise.mappings [:ユーザー] エンド それは "成功する必要がある" やる GET '編集' response.shouldのbe_success 終了 エンド エンド – eWizardII

-1

あなたのルートは、次のようになります。

devise_for :users, :controllers => { :registrations => "registrations" } do 
    get "https://stackoverflow.com/users/sign_up/:invitation_token" => 'registrations#new' 
end 
+0

?唯一の違いは、hash synatax - > 'registrations:' vs ':registrations =>'です。 Ruby <1.9.2でアプリケーションを実行しない限り、違いはありません。 –

+0

ああ、大丈夫です。 didntはそれを知っています。前にその構文を見たことはありません。ありがとう。 –

+0

;)それに慣れるとはるかに良いです!とにかく私の質問を編集するつもりだと思います。 –

関連する問題