我有一个在Ruby模型中的方法调用,看起来像下面这样:
Contentful::PartnerCampaign.find_by(vanityUrl: referral_source).load.first
在models spec.rb文件中,我试图通过传递参数来模拟该调用并获取一个值。但我无法确定调用的正确方式。
在我的spec.rb文件顶部,我有:
let(:first_double) {
double("Contentful::Model", fields {:promotion_type => "Promotion 1"})
}
在describe块中,我尝试了以下操作:
expect(Contentful::PartnerCampaign).to receive_message_chain(:find_by, :load, :first).
and_return(first_double)
expect(Contentful::PartnerCampaign).to receive_message_chain(:find_by, :load, :first).with(vanityUrl: 'test_promo_path').
and_return(first_double)
expect(Contentful::PartnerCampaign).to receive_message_chain(:find_by => vanityUrl: 'test_promo_path', :load, :first).
and_return(first_double)
大家可能已经猜到了,这些方法都不起作用。有人知道正确的方法吗?这种事情真的可行吗?
DB[:table].select(:column).where(id: 1).all
。如果按照传统方式进行,您必须使用更多的代码模拟doubles,然后在链中返回这些doubles,而这种方法可以减少很多代码行数。 - himanish.k