如何使用补丁请求更新 Rails 中的布尔属性

问题描述

我有一个布尔属性,我正在尝试使用 Rails 中的 Minitest 对其进行测试。这是有问题的测试:

IMetadataScope

我不明白为什么这不起作用。我可以在我的装置、数据库种子、浏览器中手动以及使用 Capybara 进行的系统测试中将 test "admins can change a user's board member status" do patch user_path(@member,as: @admin),params: { user: { board_member: true } } assert_redirected_to(user_path(@member)) assert_equal "Profile was successfully updated.",flash[:notice] assert_equal true,@member.board_member end 属性设置为 board_member

我尝试使用 true 设置将用户参数传递给补丁请求,但这也不起作用。我不断收到与布尔属性未切换为 true 相同的错误

to_json

以下是我在用户控制器中将参数列入白名单的方法

 test_admins_can_change_a_user's_board_member_status#UsersControllerTest (1.28s)
   Expected: true
   Actual: false

同样,这在浏览器中按预期工作,但我想测试参数以确保在您尝试通过 url 提交“board_member”属性时没有安全漏洞。

解决方法

您需要重新加载@member 以便将您的应用程序所做的更改反映到数据库中。

test "admins can change a user's board member status" do
  assert_changes -> { @member.board_member },from: false,to: true do
    patch user_path(@member,as: @admin),params: { user: { board_member: true } }
    @member.reload # get changes performed by app to db
  end
  # consider extracting this into separate examples
  assert_redirected_to(user_path(@member))
  assert_equal "Profile was successfully updated.",flash[:notice]
end