首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails RSpec测试:NilClass的未定义方法“传递”

Rails RSpec测试:NilClass的未定义方法“传递”
EN

Stack Overflow用户
提问于 2013-07-31 01:55:34
回答 2查看 4.7K关注 0票数 14

我试着用RSpec在Rails 3.2中测试一个方法是否触发一个电子邮件,它在生产和开发中工作,我只是无法让它通过我的测试。

我得到了错误undefined method 'deliver' for nil:NilClass

代码语言:javascript
复制
# 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'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 02:44:09

有意思,我几个小时前就不得不这么做了。您还需要对传递方法进行存根,以防止它抓狂。否则,您的should_receive将返回零,因此当您的方法调用deliver时,它将调用nil.deliver

这应该是可行的:

代码语言:javascript
复制
Mailer.should_receive(:weekly_email).and_return( double("Mailer", :deliver => true) )
票数 28
EN

Stack Overflow用户

发布于 2014-02-17 20:52:46

如果不需要更改原始行为,Rspec具有and_call_original。(doc)在您的情况下,您可以使用Mailer.should_receive(:weekly_email).and_call_original

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17960348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档