Pregunta

Estoy escribiendo un complemento Rails que incluye algunos parciales. Me gustaría probar los parciales, pero tengo dificultades para configurar una prueba que los muestre. No hay un controlador asociado, así que solo estoy fingiendo uno:

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

Pero esa llamada : render siempre explota. Intenté usar un ActionView :: Base en lugar de un ActionController :: Base , pero eso va aún menos lejos.

¿Alguien ha tenido algún éxito?

¿Fue útil?

Solución 2

La respuesta final:

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

Otros consejos

checkout ActionView :: TestCase - http://api.rubyonrails.org/classes /ActionView/TestCase.html

También puede usarlos para probar ayudantes, lo que me ha resultado extremadamente útil.

RSpec también tiene una forma de probar vistas: http://rspec.info/ documentation / rails / writing / views.html

¡Espero que eso ayude!

Lo más cerca que he llegado es

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

Pero ahora aparece un error de enrutamiento: ActionController :: RoutingError: ninguna ruta coincide {: action = > " _renderizer " ;,: controller = > " " ;,: args = > {:: locals = > {: ...},: partial = > " / my_partial "}}

Le sugiero que mire el código del recurso_controlador . También he visto el enfoque en algunos otros complementos.

La respuesta es simple: en el directorio prueba , crea una aplicación que utiliza su complemento. A partir de ahí, simplemente use las herramientas comunes para probar las vistas de Rails.

La aplicación de prueba puede ser extremadamente simple si no hay muchos casos de uso diferentes para su complemento. En el caso de complementos más complejos, como resource_controller, probablemente tendrá que crear bastantes controladores diferentes, etc.

Para engañar a su aplicación de prueba para que cargue su complemento, la forma más sencilla es crear un enlace a la raíz del directorio r_c dentro del directorio de complementos de la aplicación de prueba. Esto no funcionará en Windows, solo en sistemas operativos POSIX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top