首页 > 解决方案 > 如何 RSpec 测试设置的错误通知

问题描述

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

  def destroy
    if @account.destroy
      flash[:success] = "Account deleted!"
    else
      flash[:error] = "Could not delete account!"
    end
    redirect_to(:back)
  end

显然,在大多数情况下,您不会遇到该请求的任何失败。@account.destroy如果会以某种方式返回错误,我应该如何测试是否设置了错误闪存?有没有办法嘲笑它?

标签: ruby-on-railsrspec

解决方案


如果您希望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)


推荐阅读