0

私は既存の Rails アプリ (30 以上のモデル、30 以上のコントローラー) に取り組んでおり、Devise の確認可能なものを実装しようとしています (現在、ユーザーはサインアップ時にパスワードの作成を求められません)。

私の問題は、2 つの (一見) 小さなアクションが原因で 300 スペックが失敗し始めることです... より経験豊富な手からのアドバイスがあれば、うさぎの穴に行き過ぎないように助けてくれることを願っています.

2 つのアクション:

(1) 内で、デバイス構成user.rbに追加します。:confirmable

devise :database_authenticatable, :recoverable, :rememberable, :confirmable, ...

(2)構成のdevise.rbコメントアウトを外しますallow_unconfirmed_access

config.allow_unconfirmed_access_for = 2.days

これら 2 つのアクションにより、すべての仕様のほぼ 1/4 が失敗し始めます。すべての仕様に飛び込んで変更を加える前に、誰かが私に欠けているものを教えてくれるか、正しい方向に向けてくれませんか?

更新原因を、管理者権限の問題であると思われるものに絞り込みました。通常のユーザーを対象とする仕様は合格していますが、管理者ログインを必要とするテストはすべて失敗しています (たとえば、予想される応答が 200 ではなく 302 または 401 を返す仕様...)。

通常のユーザー向けの工場では、confirmed_ateq に含めていTime.nowます。これは私が管理者を構築する方法です:

  factory :admin_user, :parent => :user do
    email ADMIN_USER_EMAIL
  end

ADMIN_USER_EMAIL は、実際の管理者の電子メール アドレスを参照する ENV 変数です。から継承し:parent => :userているため、管理者を確認するために他に何をすべきかわかりません??

4

1 に答える 1

0

わかりました、それはとにかく不十分な質問でしたが、319 仕様が壊れた原因の根底にたどり着きました。

Devise の :confirmable の機能の 1 つは、アカウントを確認する必要があるだけでなく、アカウントへの変更も確認する必要があることです。

ユーザー ファクトリ スタブが更新/割り当てられていた仕様 (更新があったかどうかにかかわらずuser.email=)gift_payment.user.xyz=は、undefined method for nil class.

それで、私は自分factories.rbspec_utilities.rbすべての個々の仕様を調べuser.confirm!て、呼び出されていることを確認しました。

ファクトリとユーティリティ メソッドを変更すると、319 エラーが約 30 に減少し、そこから各仕様に進みconfirm!、さまざまな場所に散らばらなければなりませんでした。

私のアプローチがベースから外れているかどうかはまだわかりませんが、失敗した仕様は 0 になっています... (今のところ)。

于 2013-10-22T18:07:02.257 に答える