Cada vez que ejecuto las pruebas de rspec para mi aplicación Rails se tarda una eternidad y un día de sobrecarga antes de que realmente comience a ejecutar las pruebas. ¿Por qué rspec es tan lento? ¿Hay alguna manera de acelerar la carga inicial de Rails o seleccionar la parte de mi aplicación Rails que necesito (por ejemplo, solo material ActiveRecord) para que no cargue absolutamente todo para ejecutar algunas pruebas?¿Por qué RSpec es tan lento en Rails?
Respuesta
Debería poder acelerar sus llamadas script/spec
ejecutando script/spec_server
en una ventana de terminal separada, y luego agregando el parámetro adicional -X
a sus llamadas de especificación.
¿Lo está ejecutando a través de Rails? Si es así, la inicialización de RSpec no es lenta, sino de Rails. Rails tiene que inicializar la base de código completa y la suya antes de ejecutar las especificaciones. Bueno, no tiene tiene, pero lo hace. RSpec funciona bastante rápido para mí en mis pequeños proyectos sin rieles.
Gracias por esta respuesta. He aclarado que la pregunta es específica de Rails. –
Entonces sí, sus rieles, no rspec, eso te está ralentizando. –
Las pruebas en ejecución pueden ser realmente lentas porque todo el entorno de los rieles tiene que cargarse (pruebe el script/consola) y solo entonces se pueden ejecutar todas las pruebas. Debe usar autotest, que mantiene el entorno cargado y verificará qué archivos edita. Cuando edite y guarde un archivo, solo las pruebas que dependen de ellos se ejecutarán de manera automática y rápida.
Si está usando una Mac, recomiendo usar Rspactor sobre autotest, ya que utiliza muchos menos recursos para el sondeo de archivos cambiados que el autotest. No es tanto una versión completa Cacao
o la versión joya que mantengo en Github
sudo gem install pelle-rspactor
Si bien estos no aceleran las pruebas rspec individuales, se sienten mucho más rápido, ya que de auto ejecuta las especificaciones afectadas dentro de un segundo de presionar guardar.
idea interesante, pero el enlace necesita actualización y no parece funcionar con la última rspec. –
Recomiendo usar la versión mislavs ahora. sudo gem install mislav-rspactor – Pelle
Si se encuentra en un entorno Windows, es probable que poco se pueda hacer ya que Rails parece iniciarse muy lentamente bajo Windows. Tuve la misma experiencia en Windows y tuve que mover mi configuración a una máquina virtual Linux para que realmente fuera muy rápida (también usaba autotest).
+1. Ejecuto Rails y RSpec en Linux y no tengo quejas de lentitud, aunque en una máquina bastante poderosa. Mi colega usa Windows, en hardware idéntico, y puede llevar un minuto completo cargar el entorno Rails. –
¿Por qué rspec es tan lento? porque carga todo el entorno, carga accesorios y todo ese jazz.
¿Hay alguna forma de acelerar la carga inicial de Rails? Podría intentar usar simulaciones en lugar de confiar en la base de datos; esto es realmente correcto para las pruebas unitarias y definitivamente acelerará las pruebas unitarias. Additionnaly utilizando el servidor de especificaciones como mencionado por @Scott Matthewman puede ayudar, lo mismo con la prueba automática de ZenTest mencionado por @Marc-Andre Lafortune
¿Hay una manera de destacar la parte de mi aplicación Rails que necesito (sólo por ejemplo cosas ActiveRecord) por lo no carga absolutamente todo para ejecutar algunas pruebas? qué pasa con esto
rake test:recent
No estoy seguro de cómo la tarea rspec integrar con esto, pero que sin duda podría utilizar la tarea test: reciente como plantilla para hacer lo mismo con las pruebas si el rspec.
rake test:rspec:recent
aún no existe
Hay una nueva herramienta de autotest para ruby: Infinity test @ http://github.com/tomas-stefano/infinity_test – Jean
@Scott ¿qué estás secundando y por qué? – rogerdpack
porque se carga todo por el planeta, carga accesorios y todo ese jazz.
El verdadero culpable es si lo ejecuta usando rake spec
, it runs the db:test:prepare
task.
Esta tarea descarta toda la base de datos de prueba y la vuelve a crear desde el principio. Esto me parece ridículo, pero eso es lo que hace (lo mismo sucede cuando ejecuta rake:test:units
, etc.).
Puede solucionar este problema fácilmente usando la aplicación spec
que rspec instala como parte de la gema rspec.
De esta manera:
cd railsapp
spec speC# run all specs without rebuilding the whole damn database
spec spec/models # run model specs only
cd spec
spec controllers/user* # run specs for controllers that start with user
Al soltar la base de datos y volver a crearla, se garantiza que los datos de los dispositivos se cargan correctamente y que no quedan modificaciones de las ejecuciones anteriores. ejecutar especificaciones directamente no garantiza eso. si vas a depender de la base de datos, debes recrearla desde cero, ¡simular objetos! – Jean
Creo que la experiencia "zen" que busca es ejecutar spec_server
y autospec
en el fondo, con el resultado de las pruebas casi instantánea cuando se guarda un archivo.
Sin embargo, tengo problemas para comunicarme con estos dos programas.
He encontrado una explicación here:
me he dado cuenta de que autotest no envía comandos al spec_server. En su lugar, vuelve a cargar todo el entorno de Rails y los complementos de su aplicación cada vez que se ejecuta. Esto hace que el autotest se ejecute significativamente más lento que el servidor de secuencias de comandos, porque cuando ejecuta el comando script/spec las especificaciones se envían al servidor_especificado que ya tiene encendido su entorno Rails y está listo para funcionar. Si instala un nuevo complemento o algo así, entonces tendrá para reiniciar el servidor_especificador.
Pero, ¿cómo solucionamos este problema? Supongo que implicaría descargar ZenTest y cambiar el código para el programa autotest
, pero no tengo tiempo para probarlo en este momento.
A partir de rspec-rails-1.2.7, spec_server está en desuso en favor de la gema spork.
La razón principal es que require toma para siempre en windows, por alguna razón.
Consejos para acelerar: spork ahora funciona con Windows, creo.
Usted puede tratar de "faster_require", que almacena en caché ubicaciones:
http://github.com/rdp/faster_require
GL. -rp
Definitivamente, sugiero echar un vistazo a spork.
El railstutorial refiere específicamente a esto, y da una solución para conseguir spork funcionando muy bien en raíles 3.0 (a partir de este momento, no es spork carriles 3 dispuestos fuera de la caja). Por supuesto, si no estás en los rieles 3.0, entonces deberías estar listo para ir.
La parte del tutorial que muestra cómo conseguir spork correr en carriles de 3.0
http://railstutorial.org/chapters/static-pages#sec:spork
registrarse cuando es spork carriles 3.0 listos
Spork me ha funcionado muy bien, ha vuelto a hacer las pruebas divertidas. –
Solo hay un detalle que vale la pena mencionar con respecto a spork: no se ejecuta en Windows. – lampak
- 1. ¿Por qué putImageData es tan lento?
- 2. ¿Por qué AssetManger.list() es tan lento?
- 3. ¿Por qué Dictionary.First() es tan lento?
- 4. ¿Por qué TestComplete es tan lento?
- 5. ¿Por qué DateTime.Parse es tan lento?
- 6. ¿Por qué este jquery es tan lento?
- 7. ¿Por qué numpy.array es tan lento?
- 8. ¿Por qué mi depurador es tan lento?
- 9. ¿Por qué mi código es tan lento?
- 10. ¿por qué ruby scanf es tan lento?
- 11. ¿Por qué es tan simple este algoritmo haskell tan lento?
- 12. Qué tan lento es Reflection
- 13. ¿Por qué configurar tan lento en MSYS?
- 14. MySQL registro de consultas lento - ¿qué tan lento es lento?
- 15. ¿Por qué jQuery Ajax es tan lento en IE7?
- 16. ¿Por qué mi Maven es tan lento en Ubuntu?
- 17. ¿Por qué PostgreSQL es tan lento en Windows?
- 18. ¿Por qué Array.Sort() es tan lento en comparación con LINQ?
- 19. ¿Por qué mi "tiempo de inicio" de `rake test: units` en Rails 3.2.1 es tan lento?
- 20. ¿Por qué PyPy se traduce tan lento?
- 21. ¿Por qué DateTime.Now DateTime.UtcNow tan lento/caro?
- 22. C: ¿Por qué un fprintf (stdout, ....) es tan lento?
- 23. ¿Por qué mi sitio web sinatra es tan lento?
- 24. ¿Por qué el código de Moose es tan lento?
- 25. ¿Por qué se recomienda jQuery.ready cuando es tan lento?
- 26. ¿Por qué el simulador de teléfonos Android es tan lento?
- 27. ¿Por qué este selector jQuery es tan lento?
- 28. ¿Por qué es tan lento el array.map (String.fromCharCode)?
- 29. Consultas SQL: ¿qué tan lento es demasiado lento?
- 30. qué se cygwin tan lento
Para ser claros, entonces haría algo como esto: spec --color ./spec -X –
spec_server ahora está en desuso en favor de spork. (http://github.com/timcharper/spork) – austinfromboston
https://github.com/sporkrb/spork - nueva fuente de spork – ted