通常我会像这样创建我的控制器动作:
def destroy
if @account.destroy
flash[:success] = "Account deleted!"
else
flash[:error] = "Could not delete account!"
end
redirect_to(:back)
end
显然,在大多数情况下,您不会遇到该请求的任何失败。如果@account.destroy
以某种方式返回false,我应该如何测试错误flash设置?有没有办法嘲笑它?
答案 0 :(得分:2)
如果您希望destroy方法始终返回true
,那么拥有@account.destroy!
会更好。这样,如果destroy
失败并且您(作为应用程序所有者)将收到通知以查看其原因(意外)失败,则会引发异常。
def destroy
@account.destroy!
flash[:success] = "Account deleted!"
redirect_to(:back)
end
但是要回答原始问题,您可以使用allow_any_instance_of(Account).to receive(:destroy).and_return(false)