2010-10-02 23 views
22

Tengo una prueba funcional que está utilizando accesorios. También estoy usando accesorios en mis pruebas de Unidad, pero funcionan sin fallas. Al ejecutar las pruebas funcionales, consigo un:En Rails 3, obtengo un NoMethodError para el reciclaje. método durante la prueba

NoMethodError: undefined method 'recycle!' for #<Response:0x10346be10> /test/functional/responses_controller_test.rb:10:in 'test_testing'

Mis pruebas funcionales, en este punto, no están haciendo nada más que un llegar a la acción index. Ejemplo:

setup do 
    @response = responses(:one) 
end 

test "testing" do 
    get :index 
    assert true 
end 

Mi clase TestHelper sí incluye todos los accesorios, por lo que los accesorios respuestas son definitivamente cargando. Y como dije, los dispositivos funcionan perfectamente bien en las pruebas de Unidad.

Alguna idea de lo que podría estar causando esto?

Respuesta

44

Cambio

setup do 
    @response = responses(:one) 
end 

a

setup do 
    @myresponse = responses(:one) 
end 

y listo!

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 tiene un "ActionDispatch :: Respuesta". Lo sobreescribe, ya no es "ActionDispatch :: Response" y el caso de prueba falla.

No estoy seguro si este es el comportamiento previsto.

De todos modos, solo asegúrate de no sobreescribir @ response/@ request/@ controller/@ routes y debería funcionar.

+1

Gracias, acabo de guardar mi tocino. Tuve un problema similar con una variable llamada @request. –

+0

¡Guau! Tenía exactamente el mismo código que el OP, ¡y ahora tengo exactamente el mismo código que su solución! @flo – Ben

2

respuesta de Flo es sobre todo correcto, pero yo sólo quería aclarar:

En Rails 3.0.x que se espera @request a ser un tipo ActionController::TestRequest, que tiene el método recycle! definido en ella. Hay TestResponse, TestRequest y TestSession.

Es posible que desee inicializar o manipular objetos de estos tipos para determinadas situaciones. En mi caso, necesitaba burlarse del sitio que tiene un nombre de dominio específico con

@request = ActionController::TestRequest.new unless @request 
@request.host = "www.hostname.com" 
2

solo tuve un problema similar nombrar una variable @request. Cambié a @_request y resolvió el problema.

+0

Gracias. Lo mismo ocurre con '@ response'. – scarver2

Cuestiones relacionadas