2

テストには Rspec、FactoryGirl、および Spork を使用しています。少し不明な点が 2 つあります。最初は、factory.rb ファイルの場所です。現在、私はそれを

spec/support/factories.rb

そして、それはこのように見えます

 FactoryGirl.define do
 factory :user do
 email                 "example@yahoo.com"
 password              "password"
 password_confirmation "password"
 confirmed_at           Time.now

 end 
 end

私のspec_helper内に私が持っている

config.include FactoryGirl::Syntax::Methods

次に、コントローラーのテストを開始する前にユーザーにログインしたいのですが、この特定のコントローラーにはフィルターの前に :authenticate_user! があります。

認証にdeviseを使用しているため、追加しました

config.include Devise::TestHelpers, :type => :controller

デバイスのドキュメントを読んで、controller_macros.rb を追加し、使用するメソッドを指定することができます

 def login_user
 before(:each) do
  @request.env["devise.mapping"] = Devise.mappings[:user]
  user = FactoryGirl.create(:user)
  user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are      using the confirmable module
  sign_in user
  end
  end

そして、これも私のspec_helperに追加しました

config.include ControllerMacros, :type => :controller

そのため、コントローラーのテストの前に login_user を追加すると、未定義のメソッド login_user が取得されます。ここで同じことをするために 2 つのツールを使用していますか? 私は実際にdeviseメソッドが必要ですか、それともfactoryGirlですべて行うことができますか. その場合、コントローラをテストする前にログイン プロセスをセットアップするにはどうすればよいですか?

4

1 に答える 1

2

工場の場所は にあるはずですspec/factories。このサンプルアプリhttps://github.com/RailsApps/rails3-devise-rspec-cucumber/tree/master/specを確認してください。

ログインについては、通常、正しく行っているようです。サンプルアプリをもう一度確認してください: https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-%28and-rspec%29

undefined method login_userエラーについては、必ず

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

config.extend ControllerMacros, :type => :controller

spec_helper で。Devise メソッドは、次の件名で利用できる必要があります。

subject.current_user.should_not be_nil
于 2013-01-31T12:09:43.643 に答える