модуль ActionView::TestCase::Behavior::ClassMethods
Атрибуты
Открытые методы экземпляра
# File actionview/lib/action_view/test_case.rb, line 164
def determine_default_helper_class(name)
determine_constant_from_test_name(name) do |constant|
Module === constant && !(Class === constant)
end
end # File actionview/lib/action_view/test_case.rb, line 183 def helper_class @helper_class ||= determine_default_helper_class(name) end
# File actionview/lib/action_view/test_case.rb, line 170
def helper_method(*methods)
# Almost a duplicate from ActionController::Helpers
methods.flatten.each do |method|
_helpers_for_modification.module_eval <<~end_eval, __FILE__, __LINE__ + 1
def #{method}(...) # def current_user(...)
_test_case.send(:'#{method}', ...) # _test_case.send(:'current_user', ...)
end # end
end_eval
end
end # File actionview/lib/action_view/test_case.rb, line 187 def new(*) include_helper_modules! super end
# File actionview/lib/action_view/test_case.rb, line 148
def register_parser(format, callable = nil, &block)
parser = callable || block || :itself.to_proc
content_class.redefine_method(format) do
parser.call(to_s)
end
end Регистрирует вызываемый объект для разбора отрендеренного содержимого для заданного формата шаблона.
Каждый зарегистрированный парсер также определит метод-помощник #rendered.[FORMAT], где [FORMAT] соответствует значению аргумента format.
По умолчанию, ActionView::TestCase определяет парсеры для:
-
:html- возвращает экземплярNokogiri::XML::Node -
:json- возвращает экземплярActiveSupport::HashWithIndifferentAccess
Эти предварительно зарегистрированные парсеры также определяют соответствующие методы-помощники:
-
:html- определяетrendered.html -
:json- определяетrendered.json
Параметры
-
format -
Название (в виде
Symbol) формата, используемого для рендеринга содержимого. -
callable -
Парсер. Вызываемый объект, который принимает отрендеренную строку в качестве единственного аргумента. В качестве альтернативы, парсер может быть задан как блок.
Примеры
test "renders HTML" do
article = Article.create!(title: "Hello, world")
render partial: "articles/article", locals: { article: article }
assert_pattern { rendered.html.at("main h1") => { content: "Hello, world" } }
end
test "renders JSON" do
article = Article.create!(title: "Hello, world")
render formats: :json, partial: "articles/article", locals: { article: article }
assert_pattern { rendered.json => { title: "Hello, world" } }
end
Для разбора отрендеренного содержимого в RSS, зарегистрируйте вызов RSS::Parser.parse:
register_parser :rss, -> rendered { RSS::Parser.parse(rendered) }
test "renders RSS" do
article = Article.create!(title: "Hello, world")
render formats: :rss, partial: article
assert_equal "Hello, world", rendered.rss.items.last.title
end
Для разбора отрендеренного содержимого в Capybara::Simple::Node, повторно зарегистрируйте парсер :html с вызовом Capybara.string:
register_parser :html, -> rendered { Capybara.string(rendered) }
test "renders HTML" do
article = Article.create!(title: "Hello, world")
render partial: article
rendered.html.assert_css "h1", text: "Hello, world"
end
# File actionview/lib/action_view/test_case.rb, line 155
def tests(helper_class)
case helper_class
when String, Symbol
self.helper_class = "#{helper_class.to_s.underscore}_helper".camelize.safe_constantize
when Module
self.helper_class = helper_class
end
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.