我的网站包含多种类型的客户(例如管理员、经理、市场营销等)
使用 Rails,我被要求向这些人发送测试电子邮件,以便他们可以在自己的电子邮件客户端上预览电子邮件 + 防火墙限制 + 查看电子邮件是否进入促销文件夹。我需要能够向每个用户类型发送一组特定的电子邮件(这样的测试很少,但最终我们公司的任何管理员都应该能够使用前端界面发送测试电子邮件)。
我要做什么,它为每个用户类型编写一个类,这将注册该用户可能在某个时候收到的电子邮件,并在仅构建模式下使用(例如 FactoryGirl)(不写入数据库! !)构建发送电子邮件所需的模型deliver_now
(因此我避免了序列化/反序列化问题)。我希望能够在我的真实生产环境中运行这个系统(这样我就可以使用我的真实电子邮件信誉、签名等)
有没有一种简单的方法来禁用数据库写入(所以我确保我的所有示例模型在用于发送电子邮件后都被销毁?)?一个简单的选择是使用只读数据库凭据启动服务器,但也许有一些安全的东西可以避免太多麻烦。
这是我的代码的样子
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
我的 FactoryGirls 工厂非常混乱,虽然我正在使用这些:build
方法,但有些工厂是使用与:create
策略的关联来编写的,所以为了确保,我想锁定数据库写入,这样我就可以轻松防止我的数据库上出现不良噪音(我我正在使用 Mongoid,所以我没有简单的事务机制来取消我的所有写入)