此代码的目的是向用户发送一封电子邮件,其中包含折扣百分比已达到给定阈值的产品数组。产品被退回:
user.notifications
它返回具有以下格式的 2 个元素数组的数组:
[[product, notification]]
通知是由折扣百分比和 product_id 组成的对象。
send_notification?
检查是否在过去 7 天内向用户发送了通知并返回一个布尔值(如果他们在上周没有收到电子邮件,则为 true,如果他们收到正在传递的产品,则为 false。)
我有以下工作和伴随的测试:
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。如果我没有提供足够的细节,但我不想发布太多代码,我提前道歉。发表评论,我将包括所要求的任何细节。谢谢你的时间,我真的很感激!