微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您如何存根和测试根据传递给它的对象类调用不同方法的助手?

如何解决您如何存根和测试根据传递给它的对象类调用不同方法的助手?

我有这个助手,我正在尝试用Minitest编写测试。助手根据我作为参数传递的对象类调用一个方法,如下所示:

  def label_for(object)
      status = object&.status
      case object.class.name
      when "Subscription"
        class_for_subscription_status(status)
      when "Payment"
        class_for_payment_status(status)
      when "Purchase"
        class_for_purchase_status(status)
      when "Invoice"
        class_for_invoice_status(status)
      when "Ticket"
        class_for_ticket_status(status)
  end

每个单独的方法都已经在其他地方测试过,所以我只需要测试一下,如果我将类Subscription对象传递给label_for,它将调用class_for_subscription_status(status)而不是其他东西。

这是我要进行的测试,但出现NoMethodError: undefined method ``class_for_subscription_status' for #<AuxiliariesHelperTest错误

  test "#label_for(object) should invoke the right helper if object is of class Subscription" do
    AuxiliariesHelperTest.any_instance.stubs(:label_for).with(subscriptions(:user)).returns(:class_for_subscription_status)

    assert_equal class_for_subscription_status(subscriptions(:user).status),label_for(subscriptions(:user))
  end

我在做什么错了?

解决方法

您可以添加整个课程吗?仅凭此片段很难猜测。

我看到的一个问题是您正在从AuxiliariesHelperTest类而不是AuxiliariesHelper类中添加一个方法。

另一个可能的问题是您的助手似乎是一个模块而不是一个类,您应该在测试文件中包括该助手。否则,您的测试类应继承自ActionView::TestCase。这样的事情可能会有所帮助:

class AuxiliariesHelperTest < ActionView::TestCase
  include AuxiliariesHelper
 

  test "#label_for(object) should invoke the right helper if object is of class Subscription" do
    AuxiliariesHelper.any_instance.stubs(:label_for).with(subscriptions(:user)).returns(:class_for_subscription_status)

    assert_equal class_for_subscription_status(subscriptions(:user).status),label_for(subscriptions(:user))
  end
end

尽管在我看来,您不应该对方法进行存根,但是应该期望调用正确的方法:

class AuxiliariesHelperTest < ActionView::TestCase
  include AuxiliariesHelper
 

  test "#label_for(object) should invoke the right helper if object is of class Subscription" do
    AuxiliariesHelper.any_instance.expects(:label_for).with(subscriptions(:user).status)

    label_for(subscriptions(:user))
  end
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。