所以我最近引入了Rails最佳实践gem,它说我应该使用current_user.find而不是以不同的方式。问题是,当current_user没有记录时,这当然会抛出ActiveRecord :: RecordNotFound。现在在我的集成测试中,我明确地测试用户无法访问其他用户记录。这会导致抛出错误。问题是,我想处理这个错误,因为我希望它被抛出。它目前使我的测试变红了。如何让我的测试变为绿色,同时仍然测试错误是否被抛出?任何帮助澄清最佳实践将不胜感激!谢谢!
旁注
如您所见,我试图使用assert_raise。当然没有抓住错误......而assert_field_no_difference只是我帮助方法之一..
此外,我现在一直在寻找答案。大多数人都会解决如何在控制器中处理它,渲染页面或重定向,但我还没有发现任何人如何处理它作为测试中的预期行为。
我的集成测试
test "tries to edit resource not associated with user" do
login(@user)
assert_field_no_difference @resource, 'url' do
assert_raise ActiveRecord::RecordNotFound do
put community_resource_path(@resource), params: { community_resource: {
url: 'http://www.example.com'}}
end
end
end
错误按预期播放
Error:
Community::ResourcesFlowsTest#test_tries_to_edit_resource_not_associated_with_user:
ActiveRecord::RecordNotFound: Couldn't find Community::Resource with 'id'=1 [WHERE "community_resources"."user_id" = $1]
app/controllers/community/resources_controller.rb:106:in `set_allowable_access_resource'
test/integration/community/resources_flows_test.rb:110:in `block in <class:ResourcesFlowsTest>'