mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
give a better error message for misspelled helpers
See comment in this patch for the rationale. References #16468
This commit is contained in:
parent
ae07806858
commit
8d7cf75684
3 changed files with 38 additions and 1 deletions
|
@ -150,7 +150,17 @@ module AbstractController
|
|||
rescue LoadError => e
|
||||
raise AbstractController::Helpers::MissingHelperError.new(e, file_name)
|
||||
end
|
||||
file_name.camelize.constantize
|
||||
|
||||
mod_name = file_name.camelize
|
||||
begin
|
||||
mod_name.constantize
|
||||
rescue LoadError
|
||||
# dependencies.rb gives a similar error message but its wording is
|
||||
# not as clear because it mentions autoloading. To the user all it
|
||||
# matters is that a helper module couldn't be loaded, autoloading
|
||||
# is an internal mechanism that should not leak.
|
||||
raise NameError, "Couldn't find #{mod_name}, expected it to be defined in helpers/#{file_name}.rb"
|
||||
end
|
||||
when Module
|
||||
arg
|
||||
else
|
||||
|
|
|
@ -60,6 +60,12 @@ class HelpersPathsController < ActionController::Base
|
|||
end
|
||||
end
|
||||
|
||||
class HelpersTypoController < ActionController::Base
|
||||
path = File.expand_path('../../fixtures/helpers_typo', __FILE__)
|
||||
$:.unshift(path)
|
||||
self.helpers_path = path
|
||||
end
|
||||
|
||||
module LocalAbcHelper
|
||||
def a() end
|
||||
def b() end
|
||||
|
@ -82,6 +88,22 @@ class HelperPathsTest < ActiveSupport::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
class HelpersTypoControllerTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@autoload_paths = ActiveSupport::Dependencies.autoload_paths
|
||||
ActiveSupport::Dependencies.autoload_paths = Array(HelpersTypoController.helpers_path)
|
||||
end
|
||||
|
||||
def test_helper_typo_error_message
|
||||
e = assert_raise(NameError) { HelpersTypoController.helper 'admin/users' }
|
||||
assert_equal "Couldn't find Admin::UsersHelper, expected it to be defined in helpers/admin/users_helper.rb", e.message
|
||||
end
|
||||
|
||||
def teardown
|
||||
ActiveSupport::Dependencies.autoload_paths = @autoload_paths
|
||||
end
|
||||
end
|
||||
|
||||
class HelperTest < ActiveSupport::TestCase
|
||||
class TestController < ActionController::Base
|
||||
attr_accessor :delegate_attr
|
||||
|
|
5
actionpack/test/fixtures/helpers_typo/admin/users_helper.rb
vendored
Normal file
5
actionpack/test/fixtures/helpers_typo/admin/users_helper.rb
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
module Admin
|
||||
module UsersHelpeR
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in a new issue