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