此代码的目的是向具有折扣百分比已达到给定阈值的产品阵列的用户发送电子邮件。产品退回:
user.notifications
返回一个包含以下格式的2个元素数组的数组:
[[product, notification]]
通知是由折扣百分比和product_id组成的对象。
send_notification?
检查用户是否在过去7天内收到通知并返回布尔值(如果他们上周没有收到电子邮件,则为true;如果传入的产品有,则为false)。< / p>
我有以下工作和随附测试:
class ProductNotificationEmailJob
include SuckerPunch::Job
def perform(user)
user_notifications = user.notifications || []
products = []
notifications = []
user_notifications.each do |notification|
if notification[1].send_notification?
products << notification[0]
notifications << notification[1]
end
end
NotificationMailer.notification_email(user, products).deliver
notifications.each do |notification|
notification.update(notification_date: Time.now)
end
end
end
试验:
require 'rails_helper'
describe ProductNotificationEmailJob do
it 'performs' do
notification = ObjectCreation.create_notification
expect(notification.notification_date).to be_nil
user = notification.user
stub = double("Object")
expect(NotificationMailer).to receive(:notification_email).with(user, [notification.my_product.product]).and_return(stub)
expect(stub).to receive(:deliver)
ProductNotificationEmailJob.new.perform(user)
expect(MyProductsNotification.last.notification_date).to_not be_nil
end
end
当我拿出这条线时: 包括SuckerPunch :: Job 测试通过正常,但我不能让它通过那条线。由于某些原因,使用包含SuckerPunch :: Job行,似乎对象创建方法不起作用,并为所有值返回nil。如果我没有提供足够的细节但我不想发布太多代码,我会提前道歉。发表评论,我将包括所要求的任何细节。感谢您的时间,我真的很感激!
答案 0 :(得分:0)
在用新眼睛看问题后,我意识到我甚至试图在ProductNotificationEmailJob类中完成所有这些工作,从而违反了封装规则。我提取到另一个类,一切运行良好,完全可测试。