【问题标题】:Rspec testing POROs included in models railsRspec 测试模型导轨中包含的 PORO
【发布时间】:2016-07-25 11:10:47
【问题描述】:

在我的订单模型中,我包含一个 PORO 类“ShipmentHandler”。这个 PORO 的位置​​是这样的:app/models/order/shipment_handler.rb

我在我的 Order 模型中这样调用它:

def assign_shipments
  ShipmentHandler.new(self).assign_shipments
end

我的 PORO 长这样:

class Order
    class ShipmentHandler 
        def initialize(order)
            @set_some_variables
        end

        def some_methods
        end
    end
end

我正在尝试创建规范来测试我的 ShipmentHandler 类中的方法。我不知道该怎么做,因为我不断收到uninitialized constant ShipmentHandler 之类的错误

我尝试将它添加到我的 order_spec.rb 中,如下所示:

describe Order do 
    describe Order::ShipmentHandler do
    end
end

和:

describe Order do 
    describe ShipmentHandler do
    end
end

都不行。我还尝试在 spec/models/order/shipment_handler_spec.rb 中创建规范 这也失败了。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 rspec


    【解决方案1】:

    当我对嵌套 ShipmentHandler 类的 Order 类的外观做出一些假设时,以下编写规范的方式对我有用:

    class Order
      def assign_shipments
        ShipmentHandler.new(self).assign_shipments
      end
    
      class ShipmentHandler
        def initialize(order)
          @order = order
        end
    
        def some_methods
        end
      end
    end
    
    RSpec.describe Order do
      it { is_expected.to be_a Order }
    end
    
    # Method 1
    RSpec.describe Order::ShipmentHandler do
      subject(:shipment_handler) { described_class.new(Order.new) }
    
      it { is_expected.to be_a Order::ShipmentHandler }
    end
    
    # Method 2
    class Order
      RSpec.describe ShipmentHandler do
        subject(:shipment_handler) { described_class.new(Order.new) }
    
        it { is_expected.to be_a Order::ShipmentHandler }
      end
    end
    

    【讨论】:

    • 您先生,是我的英雄。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多