ruby on rails - reciclar - En Rails 3, recibo un NoMethodError para el reciclaje. método durante la prueba
reciclaje de plastico (3)
Tengo una prueba funcional que usa aparatos. También estoy usando dispositivos en mis pruebas de unidad, pero funcionan sin fallas. Al ejecutar las pruebas funcionales, obtengo un:
NoMethodError: undefined method ''recycle!'' for #<Response:0x10346be10> /test/functional/responses_controller_test.rb:10:in ''test_testing''
Mis pruebas funcionales , en este punto, no hacen más que una acción de índice. Ejemplo:
setup do
@response = responses(:one)
end
test "testing" do
get :index
assert true
end
Mi clase TestHelper incluye todos los dispositivos, por lo que los dispositivos de Respuestas definitivamente se están cargando. Y como dije, los accesorios funcionan perfectamente bien en las pruebas unitarias.
¿Alguna idea de lo que podría estar causando esto?
Acabo de tener un problema similar al nombrar una variable @request
. Cambié a @_request
y resolvió el problema.
Cambio
setup do
@response = responses(:one)
end
a
setup do
@myresponse = responses(:one)
end
¡Y ya te vas!
El problema radica en "actionpack-3.0.1 / lib / action_controller / test_case.rb" alrededor de la línea 386.
El caso de prueba asume que @response contiene un "ActionDispatch :: Response". Lo sobrescribe, ya no es "ActionDispatch :: Response" y el testcase falla.
No estoy seguro de si se trata de un comportamiento intencionado.
De todos modos, solo asegúrate de no sobrescribir @ response / @ request / @ controller / @ route y debería funcionar.
La respuesta de Flo es correcta en su mayor parte, pero solo quería aclarar:
En Rails 3.0.x, se espera que @request sea un tipo ActionController::TestRequest
, ¡que tiene el recycle!
Método definido en él. Hay TestResponse
, TestRequest
y TestSession
.
Es posible que desee realmente inicializar o manipular objetos de estos tipos para ciertas situaciones. En mi caso, necesitaba burlarme del sitio con un nombre de dominio específico con
@request = ActionController::TestRequest.new unless @request
@request.host = "www.hostname.com"