unitarias rails pruebas hacer español como ruby-on-rails ruby-on-rails-3 rspec rspec2 view-helpers

ruby on rails - rails - ¿Cómo simular un objeto de solicitud para las pruebas de ayuda de rspec?



rspec español (4)

Echa un vistazo a los programas de televisión sobre los subdominios en los carriles 3: http://railscasts.com/episodes/221-subdomains-in-rails-3

Debería ayudarte a tener una idea de cómo funcionan y tal vez cambiar la forma en que intentas hacer esos ayudantes tú mismo.

Tengo un método de ayuda de vista que genera una url mirando request.domain y request.port_string.

module ApplicationHelper def root_with_subdomain(subdomain) subdomain += "." unless subdomain.empty? [subdomain, request.domain, request.port_string].join end end

Me gustaría probar este método utilizando rspec.

describe ApplicationHelper do it "should prepend subdomain to host" do root_with_subdomain("test").should = "test.xxxx:xxxx" end end

Pero cuando ejecuto esto con rspec, obtengo esto:

Failure/Error: root_with_subdomain("test").should = "test.xxxx:xxxx" `undefined local variable or method `request'' for #<RSpec::Core::ExampleGroup::Nested_3:0x98b668c>`

¿Alguien puede ayudarme a averiguar qué debo hacer para solucionar esto? ¿Cómo puedo burlarme del objeto ''request'' para este ejemplo?

¿Hay mejores formas de generar urls donde se usan subdominios?

Gracias por adelantado.


Esta no es una respuesta completa a su pregunta, pero para el registro, puede simular una solicitud usando ActionController::TestRequest.new() . Algo como:

describe ApplicationHelper do it "should prepend subdomain to host" do test_domain = ''xxxx:xxxx'' controller.request = ActionController::TestRequest.new(:host => test_domain) helper.root_with_subdomain("test").should = "test.#{test_domain}" end end


Tienes que anteponer el método de ayuda con ''helper'':

describe ApplicationHelper do it "should prepend subdomain to host" do helper.root_with_subdomain("test").should = "test.xxxx:xxxx" end end

Además de probar el comportamiento para diferentes opciones de solicitud, puede acceder al objeto de solicitud a través del controlador:

describe ApplicationHelper do it "should prepend subdomain to host" do controller.request.host = ''www.domain.com'' helper.root_with_subdomain("test").should = "test.xxxx:xxxx" end end


Tuve un problema similar, encontré esta solución para trabajar:

before(:each) do helper.request.host = "yourhostandorport" end