在Rails中测试时如何处理引发的ActiveRecord :: RecordNotFound错误?

时间:2017-10-22 21:53:05

标签: ruby-on-rails ruby activerecord ruby-on-rails-5

所以我最近引入了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>'

0 个答案:

没有答案