【问题标题】:Rails hooks - `deliver.action_mailer` not firingRails 钩子 - `deliver.action_mailer` 未触发
【发布时间】:2019-02-11 18:31:49
【问题描述】:

我正在尝试在 Rails 应用程序中向 ActionMailer 添加一些日志记录/审核,并且我正在尝试像这样在初始化程序中挂钩 deliver.action_mailer 挂钩:

ActiveSupport::Notifications.subscribe 'deliver.action_mailer' do |_name, _start, _finish, _id, payload|
  # Do stuff here
end

但是,当我运行测试并运行 MyMailer.mailer_method.deliver! 时,钩子永远不会被触发。我在某处错过了一步吗?

【问题讨论】:

    标签: ruby-on-rails actionmailer instrumentation


    【解决方案1】:

    在测试环境中,邮件不会发送,而是存储在数组中

    # 告诉 Action Mailer 不要将电子邮件发送到现实世界。
    # :test 发送方法将发送的电子邮件累积在
    # ActionMailer::Base.deliveries 数组。
    config.action_mailer.delivery_method = :test

    你可以这样写测试:

    subject { email.deliver_now }
    
    it 'sends an e-mail' do
      expect { subject }.to change { ActionMailer::Base.deliveries.count }.by(1)
    end
    

    【讨论】:

    • 这并不是我真正想要测试的。我可以知道是否发送了邮件,但我想测试在deliver.action_mailer 钩子被触发时应该运行的代码。它确实启发了我检查是否是因为钩子没有使用 test 交付方法触发,但即使使用我的生产交付方法,它仍然没有被触发
    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 2014-09-02
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多