2008-11-05 7 views
5

Я пишу плагин Rails, который включает некоторые частичные. Я бы хотел проверить частичные данные, но мне сложно настроить тест, который будет их отображать. Там нет соответствующего контроллера, так что я просто притворяется один:Как я могу проверять виды в плагине 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 

Но :render вызов всегда взрывается. Я пробовал использовать ActionView::Base вместо ActionController::Base, но это становится еще меньше.

Неужели кто-нибудь имел успех?

ответ

1

Окончательный ответ:

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

фотографии ActionView :: TestCase - http://api.rubyonrails.org/classes/ActionView/TestCase.html

Вы также можете использовать их для тестирования помощников, которые я нашел очень полезным.

RSpec также есть способ проверить просмотры: http://rspec.info/documentation/rails/writing/views.html

Надежда, что помогает!

+0

Nothin 'делать. Я получаю всевозможные ошибки, пытающиеся вызвать методы на nil. Это похоже на то, что нужно сделать больше настроек. Использование ActionController :: TestCase не делает его лучше. – 2008-11-05 22:45:25

0

Ближайший я получил это

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 

Но я получаю ошибку маршрутизации в настоящее время: ActionController::RoutingError: No route matches {:action=>"_renderizer", :controller=>"", :args=>{:locals=>{:...}, :partial=>"/my_partial"}}

0

Я предлагаю вам взглянуть на код resource_controller plugin. Я также видел этот подход в нескольких других плагинах.

Ответ прост, в каталоге test вы создаете приложение, которое использует ваш плагин. Оттуда вы просто используете общие инструменты для проверки представлений Rails.

Приложение для тестирования может быть чрезвычайно простым, если для вашего плагина не так много разных вариантов использования. В случае более сложных плагинов, таких как resource_controller, вам, вероятно, придется создать довольно много разных контроллеров и так далее.

Чтобы обмануть тестовое приложение для загрузки вашего плагина, самый простой способ - создать ссылку на корень каталога r_c внутри каталога плагина тестового приложения. Это не будет работать в Windows, а только в ОС POSIX.

Смежные вопросы