¿Cómo puedo probar el método send_data
en Rails?¿Cómo se prueba el método send_data en Rails?
Respuesta
Cuando leí su pregunta, lo interpreté en el sentido de que él se aseguraba de que send_data enviara la cadena/lo que sea que le pidiera. No tanto para probar el envío sino para garantizarle la tranquilidad de que el método que lo envió no estaba en blanco. burlarse, como lo has hecho, realmente no le da ese resultado.
Quizás pueda asegurarse de que su cadena no esté en blanco, o algo así. De esta forma, no está probando send_data, pero todo lo que send_data obtiene es cómo quiere que se vea.
En mi caso (lo que me llevó a esta pregunta) sería
#just use this to make sure it looks like you want it to while you are writing your
#tests. I remove it after. make sure it's an instance variable @csv_string in my case.
puts assigns(:csv_string)
refute_nil assigns(:csv_string) #does the actual work. delete the puts line when done.
Algunas personas utilizan más elegantes depurador rubí y sh! T ... su kilometraje puede variar.
No debería necesitar probar el comportamiento de send_data
, principalmente porque está cubierto por las propias pruebas de Rails. Además, hará que tus pruebas se ejecuten lentamente (eventualmente). Lo que debe hacer (desde mi punto de vista) es el método de código auxiliar send_data, algo así como:
controller.expects(:send_data).with("foo").returns(:success)
espero que ayude.
No recomiendo esto. El código de burla que no le pertenece generalmente no es una buena idea. Si la API para 'send_data' cambia (digamos, con una actualización de Rails), no sabrá que su código está roto. –
@XavierShay que es muy debatible. El código de burla y troceo que no le pertenece a menudo se considera la Única buena manera de tener pruebas unitarias reales. Sin embargo, el "flujo ascendente puede cambiar" es algo que querrá ver en las pruebas. Pero no en pruebas unitarias. Deberías tener pruebas de integración para eso. (Esto es, como su punto, solo una opinión, hay muchas) – berkes
"El código de burlarse y trocear que usted no posee a menudo se considera la Única buena manera de tener pruebas unitarias reales". ¿referencia? Me gustaría leer más acerca de cómo funciona bien (a largo plazo) para las personas. Para respaldar mi propia afirmación anterior: http://www.jmock.org/oopsla2004.pdf y los principales resultados en https://www.google.com/?#safe=active&q=only+mock+types+you. + propio –
Puede probarlo indirectamente comprobando el valor de Content-Transfer-Encoding
encabezado.
expect(controller.headers["Content-Transfer-Encoding"]).to eq("binary")
o
controller.headers["Content-Transfer-Encoding"].should eq("binary")
controlador no está definido – nathanengineer
@glochild puede ser '@ controller' funcionará para usted – prasvin
En primer lugar, observa el código del método send_data
http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_data
De acuerdo con esto, send_data
simplemente poner todo a render :text => '...'
con opciones adicionales.
creo que puede hacerlo de esta manera:
response.body.should eql data
response.header['Content-Type'].should eql 'image/png'
- 1. C#: ¿Cómo se prueba el método IEnumerable.GetEnumerator()?
- 2. ¿Cómo se configura Expira: cabecera cuando se utiliza send_data
- 3. ¿Qué método de prueba usar? [Rails]
- 4. ¿Cómo se prueba una respuesta 204 en RSpec en Rails?
- 5. ¿Cómo se prueba el hash de params en una prueba de Rails?
- 6. ¿Cómo renderizar una plantilla XML y luego usar SEND_DATA en Ruby on Rails 3.2.8?
- 7. Rails send_data lanza "secuencia de bytes no válida en UTF-8" ... pero ¿por qué?
- 8. EasyMock: prueba ese método en el simulacro no se llama
- 9. ¿Cómo obtengo el nombre del método de prueba que se ejecutó en un método de prueba y derribo?
- 10. Cómo probar el método de actualización en Rails
- 11. ¿Cómo funciona el método Rails como "has_one"?
- 12. ¿Cómo se llama un método cada hora en Rails?
- 13. Rails El método de serialización de ActiveRecord no funciona en el entorno de prueba
- 14. ¿Cómo se prueba HTTPS con Rails script/server?
- 15. Prueba ApplicationController Filters, Rails
- 16. Falta el método de uso en Rails
- 17. ¿Cómo se prueba que se llamó un método dentro de una clase bajo prueba?
- 18. ¿Cómo se prueba el método ApplicationController definido también como un método auxiliar?
- 19. ¿Cómo se prueba un método que genera hilos?
- 20. ¿Cómo se prueba un método de acción que devuelve JsonResult?
- 21. ¿Cómo se prueba un método con una instrucción `using`?
- 22. En Rails 3, obtengo un NoMethodError para el reciclaje. método durante la prueba
- 23. Prueba HTTP Basic Auth en Rails 2.2 +
- 24. Cómo pasar un argumento para delegar el método en Rails
- 25. ¿Cómo obtener el método actual en Rails 3?
- 26. ¿Qué marcos de prueba se usan para Rails?
- 27. Cómo verificar si se llama al método en el sistema bajo prueba (no es un simulacro)
- 28. Simula un método en la misma clase que se prueba
- 29. Diferencia entre carriles SEND_DATA y send_file, con el ejemplo
- 30. ¿Cómo se prueba un método que se ejecuta en un bucle infinito para alguna entrada?
La prueba del controlador es sobre burlas. Si necesita algo "real", realice una prueba de integración. La solución a continuación es en realidad la "forma rspec" si quieres. – yiwen
¿La prueba del controlador es sobre burlas? declaración extraña y peor, un voto hacia abajo. Cuando te burlas de eso, no estás probando nada más que el hecho de que send_data recibió un llamado y continúa haciendo su trabajo.En mi ejemplo, como dijo el OP, estamos probando que send_data realmente está haciendo su trabajo. una prueba de tranquilidad – pjammer
Usa una prueba de integración para eso. las pruebas unitarias no son un lugar para probar trabajos de send_data. – yiwen