2008-11-05 11 views
5

Piszę wtyczkę Rails, która zawiera częściowe. Chciałbym przetestować częściowe, ale ciężko jest ustawić test, który je wyrenderuje. Nie ma przyporządkowany kontroler, więc ja tylko udaje jednego:Jak mogę przetestować widoki w wtyczce Rails?

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 

Ale :render wezwanie zawsze wieje. Próbowałem użyć ActionView::Base zamiast ActionController::Base, ale to jest jeszcze mniej.

Czy ktoś miał jakiś sukces?

Odpowiedz

1

Odpowiedź ostateczna:

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 
2

Zamówienie actionView :: TestCase - http://api.rubyonrails.org/classes/ActionView/TestCase.html

Można również wykorzystać do przetestowania pomocników, które znalazłem bardzo pomocne.

RSpec ma również sposób przetestować widoki: http://rspec.info/documentation/rails/writing/views.html

nadzieję, że pomoże!

+0

Nic nie robi. Otrzymuję różnego rodzaju błędy próbujące wywoływać metody na zero. To tak, jakby trzeba było wykonać więcej ustawień. Używanie ActionController :: TestCase nie czyni go lepszym. –

0

Najbliżej stałam jest

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 

Ale pojawia się błąd routingu teraz: ActionController::RoutingError: No route matches {:action=>"_renderizer", :controller=>"", :args=>{:locals=>{:...}, :partial=>"/my_partial"}}

0

Proponuję spojrzeć na kod dla resource_controller plugin. Widziałem także podejście w kilku innych wtyczkach.

Odpowiedź jest prosta, w katalogu testujesz, że używa twojej wtyczki. Stamtąd wystarczy użyć typowych narzędzi, aby przetestować widoki Rails.

Aplikacja testowa może być bardzo prosta, jeśli nie ma wielu różnych przypadków użycia wtyczki. W przypadku bardziej złożonych wtyczek, takich jak resource_controller, prawdopodobnie będziesz musiał stworzyć kilka różnych kontrolerów i tak dalej.

Aby oszukać aplikację testową do ładowania wtyczki, najprostszym sposobem jest utworzenie łącza do katalogu głównego katalogu r_c w katalogu wtyczek aplikacji testowej. To nie będzie działać w systemie Windows, tylko w systemach POSIX.