1

どうやら私はどこにも助けが見つからないという独特の状況にあるようです。サインアップ プロセスを拡張して、データベースに追加のモデルを作成しようとしています。私がやりたいことの基本的な流れは次のとおりです。

  • ユーザーは電子メール/パスワードでサインアップします (他のモデル値とともに)
  • システムは「ユーザー」モデルを作成します
  • システムは「プロファイル」モデルを作成します
  • システムは「会社」モデルを作成します
  • システムは「アカウント」モデルを作成します

最大の課題は、私が Devise を使用していて、Rspec でこの機能をテストする方法が分からないことです。これは、単に「サインアップ」メソッドをテストしようとしている私の簡単なビューです (これは機能しませ:

describe "New Users" do
  describe "signing up" do
    it "should create a new user" do
      lambda do
        post :sign_up, :user => Factory.attributes_for(:user)
        response.should be_success
      end.should change(User, :count).by(1)
    end
  end
end

次のエラーが表示されます。

1) UsersController New Users signing up should create a new user
 Failure/Error: post :sign_up, :user => Factory.attributes_for(:user)
 ActionController::RoutingError:
   No route matches {:user=>{:email=>"test@user.com", :password=>"secret", :password_confirmation=>"secret"}, :controller=>"users", :action=>"sign_up"}
 # ./spec/controllers/users_controller_spec.rb:14:in `block (5 levels) in <top (required)>'
 # ./spec/controllers/users_controller_spec.rb:13:in `block (4 levels) in <top (required)>'

Devise ルートは、ユーザーのサインアップ ルートを次のように構成します。

new_user_registration GET    /users/sign_up(.:format)  {:action=>"new", :controller=>"devise/registrations"}

私はこれで髪を引っ張ってきましたが、この分野では何の助けも見つからないようです. おそらく私は間違った方法でアプローチしていますが、最初のサインアップフォームでユーザーのアカウントを設定するすべての側面 (つまり、会社のデフォルト、プロファイル設定など) を構成したいと考えています。まず、サインアップ プロセスをテストする方法を理解する必要があります。

前もって感謝します!

4

2 に答える 2

1

まず、リンクする必要のあるルートは次のとおりです。これは、デバイスがサインアップにPOSTメソッドを使用しているためです。

user_registration POST   /users(.:format)                   devise/registrations#create

たぶん、次のような構文をそこに渡してみることができます。

it "should create a new user" do
expect {
  post :create, user: FactoryGirl.attributes_for(:user)
  response.should be_redirect
}.should change(User, :count).by(1)
end

編集 わかりました、それでは、ルートの問題を解決する方法を理解しているかもしれません。新しいコントローラーを追加しました。

UsersController < Devise::RegistrationsController 

また、そこにメソッドsign_upを追加しました。次に、routes.rbに次のコードを追加しました。

devise_for :users
devise_scope :user do
 post "/sign_up", :to => "devise/registrations#create"
end

そして最後に、テストの前にこの行をテストに入れます。

@request.env["devise.mapping"] = Devise.mappings[:user]

しかし、検証に問題がありますが、既存のシステムの新しいブランチで作成したばかりなので、これは私のアプリ用だと思います。それがあなたを助けることができることを願っています。それにもかかわらず、このアプローチはかなりハックされているか、一般的ではないと思います。私はむしろ推奨されるDeviseアプローチを採用したいと思います。FactoryGirl、つまりこのリンクを使用して、いつでもユーザー依存関係を作成できます。それがあなたを助けることを願っています。

ところで、サインインについてのナンセンスな投稿を求めてください:)私は疲れていました:)

于 2012-07-10T06:30:35.813 に答える
0

ではない

post :users 

ルートは、ユーザーアクションではなく、フォーム(ユーザーアクション)new_user_registrationを含むページにリダイレクトされます。あなたはあなたのルートのようなものを見つけるべきです:newcreate

user_registration POST /users {:action => "create", :controller => "devise/registrations"}

確認してくださいrake routes

于 2012-07-02T09:07:09.467 に答える