测试何时应变为红色? Michael Hartl的Rails教程| 10.4.1锻炼

时间:2018-10-13 19:34:15

标签: ruby-on-rails

实际练习题: “通过直接向用户路径发出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中,但是如果不太可能引起进一步的问题,我很乐意推送更改,以便每个人都可以看到我的源代码。

1 个答案:

答案 0 :(得分:0)

我认为您的问题是因为您的密码安全并且无法调用。

您尝试打补丁@other_user.password,但这是nil。这是不可接受的。

因此您没有修补它,而您的assert_not @other_user.reload.admin?是绿色的。

例如尝试"password"