Wie kann ich Ansichten in einer Rails-Plugin testen?
-
06-07-2019 - |
Frage
Ich schreibe eine Rails-Plugin, das einige partials enthält. Ich mag die partials testen, aber ich habe eine harte Zeit mit einem Test einrichten, die sie machen werden. Es gibt keine zugehörige Steuerung, so dass ich nur ein Fälschen:
require 'action_controller'
require 'active_support'
require 'action_pack'
require 'action_view'
class MyTest < Test::Unit::TestCase
def setup
@renderer = ActionController::Base.new
@renderer.append_view_path File.expand_path(File.join(File.dirname(__FILE__), '..', 'views'))
end
def test_renders_link
result = @renderer.render(:partial => '/something')
assert ...
end
end
Aber der :render
Anruf bläst immer. Ich habe versucht, eine ActionView::Base
anstelle eines ActionController::Base
verwenden, aber das wird noch weniger weit.
Hat jemand keinen Erfolg gehabt?
Lösung 2
Die letzte Antwort:
require 'action_controller'
require 'active_support'
require 'action_pack'
require 'action_view'
require 'action_controller/test_case'
class StubController < ActionController::Base
helper MyHelper
append_view_path '...'
attr_accessor :thing
def my_partial
render :partial => '/my_partial', :locals => { :thing => thing }
end
def rescue_action(e) raise e end;
end
class MyTestCase < ActionController::TestCase
self.controller_class = StubController
def setup
@controller.thing = ...
get :my_partial
assert ...
end
end
Andere Tipps
Kasse ActionView :: Testcase - http://api.rubyonrails.org/classes /ActionView/TestCase.html
Sie können auch diese verwenden Helfer zu testen, die ich habe extrem hilfreich.
RSpec hat auch eine Art und Weise Ansichten zu testen: http://rspec.info/ Dokumentation / rails / Schreiben / views.html
Ich hoffe, das hilft!
Die nächstgelegene ich bekommen habe, ist
require 'action_controller'
require 'active_support'
require 'action_pack'
require 'action_view'
require 'action_controller/test_case'
class StubController < ActionController::Base
append_view_path '...'
def _renderizer; render params[:args]; end
def rescue_action(e) raise e end;
end
class MyTest < ActionController::TestCase
self.controller_class = StubController
def render(args); get :_renderizer, :args => args; end
def test_xxx
render :partial => ...
end
end
Aber ich bekomme einen Routing-Fehler jetzt: ActionController::RoutingError: No route matches {:action=>"_renderizer", :controller=>"", :args=>{:locals=>{:...}, :partial=>"/my_partial"}}
Ich schlage vor, Sie auf den Code sucht die resource_controller Plugin . Ich habe auch den Ansatz in einigen anderen Plugins gesehen.
Die Antwort ist einfach, in dem Test Verzeichnis erstellen Sie eine Anwendung, die das Plugin verwendet. Von dort nutzen Sie einfach die gemeinsamen Tools Rails Ansichten zu testen.
Der Test-App kann sehr einfach sein, wenn es nicht viele verschiedenen Anwendungsfälle für Ihr Plugin ist. Im Fall von komplexeren Plugins, wie resource_controller, werden Sie wahrscheinlich schon einige verschiedene Controller zu schaffen haben und so weiter.
Um die Test-App in Laden Plugin Trick, ist der einfachste Weg, um eine Verbindung zu der Wurzel des R_c Verzeichnisses innerhalb des Test-App Pluginverzeichnis zu erstellen. Das ist ja gar nicht auf Windows, nur POSIX OSes.