2011-11-28 95 views
1

我正在尝试将我们的应用程序的部分升级到Rails 3,特别是我们的单元测试。我一直在遇到延迟工作和邮寄者的问题,特别是邮件程序在测试运行时没有被“发送”。Rails 3延迟工作 - 升级到Rails 3中断delayed_job任务

要测试邮件发送,我们运行它们都通过在我们的测试助手的“assert_email”的方法,它看起来或多或少是这样的:

def process_delayed_jobs 
    while Delayed::Worker.new(:quiet => true).send(:reserve_and_run_one_job) do 
    # nothing 
    end 
end 
alias_method :deliver_delayed_emails, :process_delayed_jobs 

def assert_emails(number, skip_assertion = false) 
    deliver_delayed_emails # start with a clean slate 
    if block_given? 
    original_count = ActionMailer::Base.deliveries.size 
    yield 
    deliver_delayed_emails 
    new_count = ActionMailer::Base.deliveries.size 
    assert_equal original_count + number, new_count, "#{number} emails expected, but #{new_count - original_count} were sent" unless skip_assertion 
    else 
    assert_equal number, ActionMailer::Base.deliveries.size unless skip_assertion 
    end 
end 

我们测试这个像这样:

assert_emails 2 do 
    Model.action_that_sends_mailer 
end 

此代码完美地工作在Rails 2中,运行delayed_job 2.0.5。在Rails 3上,我们正在运行2.1.4。

基本上,我们每次测试都会失败,因为发送“0”电子邮件。邮件程序本身已经正确升级,并且我已经从方法调用中删除了错误的“.deliver”以将它们关闭。 delayed_jobs日志是空的,所以它看起来不像任何正在处理的东西。

我觉得我在这里缺少某种关键(但容易)的语法问题。任何帮助表示赞赏。

编辑:我还应该注意,我已经在本地机器上启动了“rails delayed_job start”和“script/delayed_job start”的delayed_job进程。既不能解决问题。

+0

告诉我们'method_call'是什么。 –

回答

0

原来与delayed_job无关的东西。