Rails:使用RSpec测试电子邮件发送的情况

时间:2013-07-30 02:45:30

标签: ruby-on-rails rspec actionmailer rspec-rails

我有一个Rails 3.2应用程序,我正在尝试测试方法是否正确触发电子邮件。我知道它可以从控制台测试它。但是,我无法通过RSpec测试。

如果昨天有一篇尚未经过审核的文章会发生什么,应该发送电子邮件。

# article.rb
scope :yesterday, where(:date=>Date.yesterday)
scope :not_reviewed, where(:reviewed=>nil)

def self.articles_not_updated
  @articles_not_updated = Article.yesterday.not_reviewed
  if @articles_not_updated.present?
    Mailer.articles_not_updated(@articles_not_updated)            
  end
end

# article_spec.rb
context "articles not updated" do

  it "should send an email if there are articles not reviewed" do
    @article = FactoryGirl.create(:article, date: Date.yesterday, reviewed: nil)
    Article.articles_not_updated
    ActionMailer::Base.deliveries.empty?.should be_false      
  end

end

我一直收到失败消息,告知它返回false。我也尝试使用Mailer.should_receive(:articles_not_updated),但该测试也失败了。有人可以帮我弄清楚我做错了吗?

*更新 - 添加错误消息 * **

expected: false value
got: true

1 个答案:

答案 0 :(得分:0)

根据我们的聊天室对话,should_receive需要在执行预期发送相关消息的代码之前出现。这至少解释了为什么你的替代测试失败了。