为什么这个测试不能用吸盘打孔宝石运行?

时间:2014-08-01 04:45:39

标签: ruby-on-rails ruby backgroundworker sucker-punch

此代码的目的是向具有折扣百分比已达到给定阈值的产品阵列的用户发送电子邮件。产品退回:

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。如果我没有提供足够的细节但我不想发布太多代码,我会提前道歉。发表评论,我将包括所要求的任何细节。感谢您的时间,我真的很感激!

1 个答案:

答案 0 :(得分:0)

在用新眼睛看问题后,我意识到我甚至试图在ProductNotificationEmailJob类中完成所有这些工作,从而违反了封装规则。我提取到另一个类,一切运行良好,完全可测试。