我正在使用Ruby on Rails 3.1.0,rspec-rails 2
和DelajdJob
宝石。为了测试用户注册时是否发送了电子邮件,我正在尝试测试延迟的电子邮件,但我有一些麻烦\怀疑(与DelayedJob
宝石没有直接关系)。
在我的控制器中我有:
def create
...
Users::Mailer.delay.sign_up(@user)
...
end
在我的邮件文件中,我有:
class Users::Mailer
def sign_up(user)
@user = user
# Note: 'authentication' refers to an associated model
@authentication = user.authentication.user_token
...
end
end
在我的spec文件中,我有:
describe "POST create" do
it "sends e-mail" do
post :create, { :email => 'foo@bar.com' }
# Here I would like to test
# (1) if the e-mail is send
# (2) if the e-mail is send to the 'foo@bar.com' address
end
end
如果我运行规范,我会收到以下错误:
Failure/Error: post :create,
NoMethodError:
undefined method `user_token' for nil:NilClass
如何解决这个问题并测试电子邮件是否已发送?我应该模拟或存根用户类对象实例吗?你对我的建议有什么建议?
答案 0 :(得分:0)
def create
... # whatever is going on here is not setting @user.authentication
Users::Mailer.delay.sign_up(@user)
...
end
编辑:我意识到我回答了你遇到错误的问题。至于模拟用户对象,在这种情况下我会反对使用模拟。在这种情况下测试的重要性是发送了一封电子邮件,然后发送到foo@bar.com。我会发布您创建用户所需的内容,然后进行验证。