我有一个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
答案 0 :(得分:0)
根据我们的聊天室对话,should_receive
需要在执行预期发送相关消息的代码之前出现。这至少解释了为什么你的替代测试失败了。