实际练习题: “通过直接向用户路径发出PATCH请求(如清单10.56所示,请验证admin属性不可通过网络进行编辑。要确保您的测试涵盖了正确的内容,第一步应将admin添加到user_params中允许的参数列表,以便初始测试为红色。”
因此,我将admin属性放在我的params哈希中,该属性允许users_controller.rb中的特定属性:
def user_params
params.require(:user).permit(:admin, :name, :email, :password,
:password_confirmation) #params hash that permits specific attributes
end
然后我在users_controller_test.rb中运行了测试:
def setup
@user = users(:michael)
@other_user = users(:archer)
end
test "should not allow the admin attribute to be edited via the web" do
log_in_as(@other_user)
assert_not @other_user.admin?
patch user_path(@other_user), params: {
user: { password: @other_user.password,
password_confirmation: @other_user.password,
admin: true } } #it's true because the user is trying to send a patch request saying they are the admin now
assert_not @other_user.reload.admin?
end
但是,当我的测试应该变成红色时,它仍然变成绿色。有人知道为什么会这样吗?我的源代码中还有其他内容会影响此测试吗?
由于这个悬而未决的问题,我没有将更改推送到heroku中,但是如果不太可能引起进一步的问题,我很乐意推送更改,以便每个人都可以看到我的源代码。
答案 0 :(得分:0)
我认为您的问题是因为您的密码安全并且无法调用。
您尝试打补丁@other_user.password
,但这是nil
。这是不可接受的。
因此您没有修补它,而您的assert_not @other_user.reload.admin?
是绿色的。
例如尝试"password"
。