如何RSpec测试错误通知的设置

时间:2018-06-02 14:09:32

标签: ruby-on-rails rspec

通常我会像这样创建我的控制器动作:

  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设置?有没有办法嘲笑它?

1 个答案:

答案 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)

始终存根返回方法