Как я могу проверить представления в плагине Rails? - PullRequest
5 голосов
/ 06 ноября 2008

Я пишу плагин 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, но это еще более далеко.

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

Ответы [ 4 ]

2 голосов
/ 06 ноября 2008

оформить заказ ActionView :: TestCase - http://api.rubyonrails.org/classes/ActionView/TestCase.html

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

В RSpec также есть способ проверки представлений: http://rspec.info/documentation/rails/writing/views.html

Надеюсь, это поможет!

1 голос
/ 06 ноября 2008

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

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
0 голосов
/ 06 ноября 2008

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

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

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

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

0 голосов
/ 06 ноября 2008

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

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"}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...