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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top