Rspec的预期(例如)接收方法无法正常运行
问题描述:
试图符合规格,如果do_something方法被调用时
#controller file
def update
@payment = Payment.find_by(reference_id: params[:reference_id])
if @payment.update(update_params)
@payment.do_something
end
end
expect(@payment).to receive(:do_something)
它说
expected: 1 time with any arguments
received: 0 times with any arguments
do_something是我付款类。它实际上被称为,但rspec说不。
任何想法?在此先感谢
答
您的规范中的@payment实际上是一个完全不同的变量,它是规格类的一部分,而不是控制器。我可能是错的,但那是我对你发布的代码的部分的假设 - 添加规范代码以获取更多信息。 作为解决方案的,可以用“存根任何实例”
一个更复杂的方法 - 使用双打
答
首先需要存根在控制器中的线,以便expect
一些代码
before do
allow(Payment).to receive(:find_by).and_return(payment)
allow(payment).to receive(:update).and_return(true)
allow(payment).to receive(:do_something)
end
此外,控制器中的实例变量将不能在rspecs中直接访问。
因此,首先利用let
创建rspecs支付对象,并用它before
阻止像我在上面解决方案做到了