0

在我的 development.rb 中,我有:

    config.action_mailer.delivery_method = :sendmail
    config.action_mailer.sendmail_settings = {
    :location => '/usr/sbin/sendmail',
    :arguments => '-i'
}

我删除了 -t 选项,因为它不允许我发送电子邮件。当我启动控制台并转到我的应用程序并发送电子邮件时,电子邮件才会发送,但只有在我按下 ctrl + C 后才会发送。我猜这是因为 sendmail 创建了一个进程,而父进程 - rails 服务器 - 等待它完成并且 ctrl + c 告诉父进程孩子已经完成。这是正确的吗?你知道如何解决它,这样我就不必按 ctrl + c 了吗?我使用 rails 3.0.9 和 ruby​​ 1.9.2。提前感谢所有答案,请原谅我的英语。这不是我的母语

4

1 回答 1

0

如果它们有效,则在开发中发送电子邮件以手动查看它们通常不是一种干净的测试方式。

这个 Rails 指南也涵盖了控制器的测试。为您的电子邮件设置测试非常简单(来自链接的Rails 指南):

#unit test
require 'test_helper'

class UserMailerTest < ActionMailer::TestCase
  tests UserMailer
  test "invite" do
    @expected.from    = 'me@example.com'
    @expected.to      = 'friend@example.com'
    @expected.subject = "You have been invited by #{@expected.from}"

    assert_equal @expected.encoded, UserMailer.create_invite('me@example.com',     'friend@example.com', @expected.date).encoded
  end
end

和一个示例功能测试(也来自Rails Guide):

require 'test_helper'

class UserControllerTest < ActionController::TestCase
  test "invite friend" do
    assert_difference 'ActionMailer::Base.deliveries.size', +1 do
      post :invite_friend, :email => 'friend@example.com'
    end
    invite_email = ActionMailer::Base.deliveries.last

    assert_equal "You have been invited by me@example.com", invite_email.subject
    assert_equal 'friend@example.com', invite_email.to[0]
    assert_match(/Hi friend@example.com/, invite_email.body)
  end
end
于 2012-06-24T15:09:56.267 回答