expect(@payment).to receive(:do_something)
当试图通过
调用do_something方法时expected: 1 time with any arguments
received: 0 times with any arguments
它说
{
"element" : value,
"id" : value,
"total" : []
}
{
"element" : value,
"id" : value,
"total: []
}
do_something在我的付款类中。它实际上被称为,但rspec说没有。
有什么想法吗?提前谢谢
答案 0 :(得分:1)
首先,您需要在控制器中存根行以便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
块
答案 1 :(得分:0)
你的@payment in specs实际上是一个完全不同的变量,它是specs类的一部分,而不是控制器。我可能错了,但这是我发布的代码部分的假设 - 添加规范代码以获取更多信息。 在解决方案中,可以使用'stub any instance'
Payment.any_instance.stub(:do_something).and_return(:smthing)
更复杂的方法 - 使用双打