【发布时间】:2016-02-19 01:12:22
【问题描述】:
这是我的控制器规格
before do
@order = Order.new
end
it "should call find & assign_attributes & test delivery_start methods" do
Order.should_receive(:find).with("1").and_return(@order)
Order.any_instance.should_receive(:assign_attributes).with({"id"=>"1", "cancel_reason" => "random"}).and_return(@order)
Order.any_instance.should_receive(:delivery_start).and_return(Time.now)
post :cancel, order: {id:1, cancel_reason:"random"}
end
失败是这样的:
Failure/Error: Unable to find matching line from backtrace
(#<Order:0x007fdcb03836e8>).delivery_start(any args)
expected: 1 time with any arguments
received: 2 times with any arguments
# this backtrace line is ignored
但我不确定为什么 delivery_start 基于此控制器操作被调用两次:
def cancel
@order = Order.find(cancel_params[:id])
@order.assign_attributes(cancel_params)
if (@order.delivery_start - Time.now) > 24.hours
if refund
@order.save
flash[:success] = "Your order has been successfully cancelled & refunded"
redirect_to root_path
else
flash[:danger] = "Sorry we could not process your cancellation, please try again"
render nothing: true
end
else
@order.save
flash[:success] = "Your order has been successfully cancelled"
redirect_to root_path
end
end
【问题讨论】:
-
对不起,但它“应该调用 find & assign_attributes & test delivery_start 方法”做 Order.should_receive(:find).with("1").and_return(@order) Order.any_instance.should_receive(: assign_attributes).with({"id"=>"1", "cancel_reason" => "random"}).and_return(@order) Order.any_instance.should_receive(:delivery_start).and_return(Time.now) post :cancel , order: {id:1, cancel_reason:"random"} end
-
我不确定,但我猜
delivery_start可能会显示在正在显示的视图中?这将是我对第二个“呼叫”来自哪里的猜测。 -
@TarynEast 没有调用
delivery_start的关联视图 -
值得一试:)
标签: ruby-on-rails ruby-on-rails-4 rspec controller rspec-rails