を書く無効にするためのフレームワーク私はRailsのを使用してRailsの - テストメールを送信し、DBは
顧客のいくつかのタイプ(などなど管理者、マネージャー、マーケティング、)でウェブサイトを持って、私はそれらにテストメールを送信するように求めています人々は自分の電子メールクライアントで電子メールをプレビューできる+ファイアウォールの制限+電子メールがプロモーションフォルダに入るかどうかを確認する。私は、各ユーザのタイプに特定の電子メールを送ることができる必要があります(そのようなテストはまれですが、弊社の管理者のいずれかがフロントエンドインタフェースを使用してテスト電子メールを送信できるはずです)。
私は、ユーザタイプごとに1つのクラスを作成し、このユーザがある時点で受け取る可能性のある電子メールを登録し、ビルド専用モードではFactoryGirlなどを使用します(no DBに書き込み!!)deliver_now
を使用してメールを送信するために必要なモデルをビルドします(シリアル化/デシリアライズの問題は避けます)。私は実際の生産環境でこのシステムを稼働させることができるようになりました。(REAL電子メールの評判、署名などを使用できるように)
DB書き込みを簡単に無効にする方法はありますか?私の模範モデルは、使用後に電子メールを送信すると破棄されますか?)簡単なオプションは、読み取り専用データベースの資格情報を使用してサーバーを起動することですが、おそらくあまりにも多くの問題を回避する安全なものがあります。ここで
私は、私のFactoryGirls工場は非常に厄介であり、私は:build
メソッドを使用しておりますが、いくつかの工場がそのように念のため:create
戦略との関連付けを使用して作成された
module Testing
module Emails
class UserTypeAdmin < Base
attr_accessor, :new_user, :admin
register_email :created_new_user, type: :user_management do
UserManagementMailer.user_created(new_user, creator: admin)
end
def prepare_models
self.admin = FactoryGirl.build(:admin)
self.new_user = FactoryGirl.build(:user)
end
end
end
end
module Testing
module Emails
class Base
class < self
# my logic to register emails, definitions of #register_email, etc.
end
def initialize(tester_emails, ccs = [])
@tester_emails = tester_emails
@ccs = ccs
prepare_models
end
def send_email(email_name)
email = instance_eval(registered_emails(email_name))
email.to = @tester_emails
email.cc = @ccs
email.deliver_now
end
のように私のコードがどのように見えるかですDBの書き込みをロックして、私のデータベース上の悪いノイズを簡単に防ぐことができます(私はMongoidを使用していますので、すべての書き込みをキャンセルする簡単なトランザクションメカニズムがありません)。
:-)より良いソリューションに目を光らせて、まだです。私はこのようなことを生産中にすることに非常に注意します。ステージング環境として同じenvを使用して、利害関係者が新しい機能をプレビューできるようにすることができます。 – max