问题描述
我有一个布尔属性,我正在尝试使用 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