我试着用RSpec在Rails 3.2中测试一个方法是否触发一个电子邮件,它在生产和开发中工作,我只是无法让它通过我的测试。
我得到了错误undefined method 'deliver' for nil:NilClass
# user_spec.rb
it "should send an email if user has weekly email set to true" do
@user = FactoryGirl.create(:user, user_name: "Jane Doe", email: "jane@gmail.com", weekly_email: true, weekly_article_count: 10)
Mailer.should_receive(:weekly_email)
User.send_weekly_email
end
# user.rb
scope :weekly_email, where(:weekly_email => true)
scope :weekly_article_count, :conditions => ["weekly_article_count IS NOT NULL"]
def self.send_weekly_email
@users = User.weekly_email.weekly_article_count
@users.each do |user|
Mailer.weekly_email(user).deliver
end
end我也尝试过使用Mailer.should_receive(:weekly_email).with(user),但随后我收到了错误undefined local variable or method 'user'
发布于 2013-07-31 02:44:09
有意思,我几个小时前就不得不这么做了。您还需要对传递方法进行存根,以防止它抓狂。否则,您的should_receive将返回零,因此当您的方法调用deliver时,它将调用nil.deliver。
这应该是可行的:
Mailer.should_receive(:weekly_email).and_return( double("Mailer", :deliver => true) )发布于 2014-02-17 20:52:46
如果不需要更改原始行为,Rspec具有and_call_original。(doc)在您的情况下,您可以使用Mailer.should_receive(:weekly_email).and_call_original。
https://stackoverflow.com/questions/17960348
复制相似问题