【发布时间】:2020-12-21 23:04:15
【问题描述】:
我有一个布尔属性,我正在尝试使用 Rails 中的 Minitest 进行测试。这是有问题的测试:
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,也可以在Capybara 的系统测试中设置。
我尝试使用to_json 设置将用户参数传递给补丁请求,但这也不起作用。我不断收到与布尔属性未切换为 true 相同的错误:
test_admins_can_change_a_user's_board_member_status#UsersControllerTest (1.28s)
Expected: true
Actual: false
这是我在用户控制器中将我的参数列入白名单的方式:
def user_params
# List of common params
list_params_allowed = [:email, :profile_photo, :first_name, :last_name, :title, :organization, :street, :city, :state, :zip_code, :phone]
# Add the params only for admin
list_params_allowed += [:role, :board_member] if current_user.admin?
params.require(:user).permit(list_params_allowed)
end
同样,这在浏览器中按预期工作,但我想测试参数以确保在您尝试通过 url 提交“board_member”属性时不存在安全漏洞。
【问题讨论】:
标签: ruby-on-rails testing tdd minitest