代码之家  ›  专栏  ›  技术社区  ›  BrianWilson

rails应用程序中私有模型方法的Rspec测试

  •  0
  • BrianWilson  · 技术社区  · 8 年前

    class MyModel < ApplicationRecord
        belongs_to something
        has_many somethings
    
        after_create :my_vital_method
    
        validates :stuff
    
        private
        def my_vital_method
            #do stuff
        end
    end
    

    当我尝试在rspec测试中调用该方法时,我得到以下错误消息:

    问题: 如何在rspec中调用私有模型方法?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Brendon Whateley    8 年前

    根据定义,不允许从类外调用私有方法,因为它们是 私有的

    幸运的是,如果你使用 object.send(:my_vital_method) 它跳过了方法调用限制的测试。

    最后,如果你试图防止篡改,那么你就是在向风车倾斜——在Ruby中你不能这样做,因为我可以简单地重新定义你的方法,并确保如果我的新方法是从你的反篡改检查代码中调用的,我会调用原始版本,否则我会做我邪恶的事情。

    祝你好运

        2
  •  0
  •   diabolist    8 年前

    如果您的私有方法需要测试,那么它可能应该是另一个类的公共方法。如果您发现这个类的名称定义了它的用途,然后创建了您想要的方法签名,那么您将得到如下结果

    def my_vital_method
      MyVitalClass.new.do_stuff
    end