2010-12-13 9 views
27

Railsのテスト環境は、各テストの前に分解され、再構築されていると私は理解しています。ユーザーはログインする必要があり、デバイスの確認可能なモジュールが途切れることなく作成できますか?Devitsの確認可能なモジュールを使ったテスト(RSpec)

Devitsのrecommended method(下記)は新しいユーザーを作成し、Deviseのconfirmableモジュールから電子メールを送信します。どのように私はこれを回避するので、私は毎回ユーザーを作成していません...または私は、各仕様の新しい電子メールを "シミュレート" w/outテストするオブジェクトを取得できますか?

before(:each) do 
    @user = Factory.create(:user) 
    sign_in @user 
    end 

私は、テスト環境ActionMailer::Base.delivery_method

答えて

32

:testに設定する必要があります...私は確認できると工夫を使用して誰のための非常に一般的な仕様でなければなりません。このように痛いほど明白な何かを見下ろすだと確信していますこれらのメールは送信されません。たとえばconfig/environments.rbの設定でこの設定をsmtpなどの別の値に設定した場合、となります。その設定がすでにあります場合は

は、あなたがそれにconfirm!を呼び出す必要があります(ログインして、実際にできるようにするには、のように)Userオブジェクトを使用します

user = User.first 
user.confirm! 
+0

を設定するためのafter(:create)after(:build)のおかげで生成されてからメーラーを防ぐの下に、あなたはまた、 '(前に、ユーザーの作成を移動することができ:すべて) 'ブロックを使用して速度を上げてください... – iain

+0

テストを実行するには、' config.action_mailer.default_url_options = {:host => 'localhost:3000'} 'を追加する必要があります。それ以外の場合は' test.rb'ボイラーですプレート、私の知識に。'test.rb'または' environment.rb'のメール関連の設定だけが 'config.action_mailer.delivery_method =:test'です。 – Meltemi

+1

'ActionMailer :: Base.delivery_method =:test'は何らかの形で自動的に生成された' config.action_mailer.delivery_method =:test'とは異なりますか? – Meltemi

2

はスタブ試しactive?

@user = Factory.create(:user) 
@user.stub(:active?).and_return(true) 
sign_in @user 

また、スタブする必要がありますconfirmed?、私もDeviseに精通していません。

12

factory_girlを使用してモデルを生成する場合は、after_createを使用して新しいユーザーを確認できます。製造宝石用

Factory.define :confirmed_user, :parent => :user do |f| 
    f.after_create { |user| user.confirm! } 
end 
+4

' confirmed_at Time.now'をファクトリ属性として追加することで同じ効果が得られると私は信じています。 – Giuseppe

1

それが最新FactoryGirlバージョンの

Fabricator(:user) do 
    after_build { |user| user.confirm! } 
end 
+2

'after_build'ではなく' after_create'が必要でしょうか? – slothbear

+0

はい、それはafter_createである必要があります – Ricbermo

17

である:それはちょうど置かれ

FactoryGirl.define do 

    factory :confirmed_user, :parent => :user do 
    after(:create) { |user| user.confirm! } 
    end 

end 
5

今日:

confirmed_at 7.days.ago

あなたのfabrの

2

Devise 4.2については、confirmconfirm!ではなく)です。

Source

4.2.0 - 2016-07-01

Remove the Devise::Models::Confirmable#confirm! method, use confirm instead.

コードもconfirmed_at

FactoryGirl.define do 
    factory :user do 
    after(:build) { |u| u.skip_confirmation_notification! } 
    after(:create) { |u| u.confirm } 
    ... 
    end 
end 
関連する問題