Rails rspec测试报patch user_path(user) param not found: user的解决

其实道理很简单,就是在User控制器的update方法中有一个验证:

def user_params
      params.require(:user).permit(:name,:email,:password,:password_confirmation)
end

如果params里面没有user,或者user里没有上面那些指定的属性名则中断代码,而在测试里引发这一错误的是以下一句:

before { patch user_path(user) }

patch方法是向后面的路径发送PATCH请求,而后面的user_path(user)则会生成如下路径:

/users/user_id

可以很清楚的看到以上行为没有向params传递任何user参数,所以会报如题的错误.

而接下来我们在User控制器中做了如下改动:

before_action :signed_in_user,only:[:edit,:update]

def signed_in_user
      redirect_to signin_url,notice:"Please sign in." unless signed_in?
    end

原来出错的测试就得以通过,其的原因就是代码流在用户没有登录的时候会直接跳转到signin_url中,根本不会进行上面的params验证,所以错误自然得以消除.

上一篇:vs2012中程序集生成无法自动在网站Bin目录下生成Dll文件?(已解决!)


下一篇:cglib应用