ruby-on-rails - crear - rspec rails tutorial
¿Por qué RSpec es tan lento en Rails? (11)
Cada vez que ejecuto las pruebas de rspec para mi aplicación Rails, lleva 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 forma de acelerar la carga inicial de Rails o seleccionar la parte de la aplicación Rails que necesito (por ejemplo, solo material ActiveRecord) para que no cargue absolutamente todo para ejecutar algunas pruebas?
¿Estás ejecutando esto en 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 por qué ser así, pero lo hace. RSpec funciona bastante rápido para mí en mis pequeños proyectos sin rieles.
Ejecutar pruebas puede ser muy lento 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 ambiente 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.
Debería poder acelerar sus script/spec
llamadas de script/spec
ejecutando script/spec_server
en una ventana de terminal separada, y luego agregando el parámetro -X
adicional a sus llamadas de especificación.
Si está usando una Mac, recomiendo usar Rspactor sobre autotest ya que utiliza muchos menos recursos para sondear archivos cambiados que Autotest. Hay una versión completa de Cocoa
o la versión de la gema que mantengo en Github
sudo gem install pelle-rspactor
Si bien estos no aceleran las pruebas individuales de rspec, se sienten mucho más rápido ya que ejecutan automáticamente las especificaciones afectadas dentro de un segundo de haber pulsado guardar.
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 estaba usando autotest).
porque carga todo el entorno, cargas y todo ese jazz.
El verdadero culpable es si lo ejecuta usando la rake spec
, ejecuta la tarea db:test:prepare
.
Esta tarea descarta toda la base de datos de prueba y la vuelve a crear desde cero. Esto me parece ridículo, pero eso es lo que hace (lo mismo sucede cuando ejecutas rake:test:units
etc.).
Puede solucionar esto fácilmente utilizando la aplicación de spec
que rspec instala como parte de la gema rspec.
Me gusta esto:
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
Creo que la experiencia "zen" que está buscando es ejecutar spec_server
y autospec
en segundo plano, con el resultado de pruebas casi instantáneas cuando guarda un archivo.
Sin embargo, tengo problemas para comunicarme con estos dos programas.
Encontré una explicación aquí :
Me di cuenta de que el autotest no envía comandos al servidor_específico. 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 script, porque cuando ejecuta el comando script / spec las especificaciones se envían al servidor_especificador, que ya tiene habilitado el entorno de Rails y está listo para funcionar. Si instalas un nuevo complemento o algo así, entonces tendrás que reiniciar el servidor_especificador.
Pero, ¿cómo solucionamos este problema? Supongo que implicaría descargar ZenTest y cambiar el código para el programa de 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 requieren demoras para siempre en Windows, por alguna razón.
Consejos para acelerar: spork ahora funciona con Windows, creo.
Puedes probar "faster_require", que almacena en caché las ubicaciones:
http://github.com/rdp/faster_require
GL. -rp
Definitivamente sugiero echarle un vistazo a spork.
El railstutorial se ocupa específicamente de esto, y ofrece una solución alternativa para que spork funcione correctamente en los rieles 3.0 (a partir de este momento, spork no es rails 3 listo de fábrica). 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 hacer que spork se ejecute en rails 3.0
http://railstutorial.org/chapters/static-pages#sec:spork
Comprobando cuando spork tiene los rieles 3.0 listos
¿Por qué rspec es tan lento? porque carga todo el entorno, cargas y todo ese jazz.
¿Hay alguna manera 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. Además, utilizar el servidor de especificaciones mencionado por @ Scott Matthewman puede ayudar, lo mismo con el autotest de zentest mencionado por @ Marc-Andre Lafortune
¿Hay alguna manera de seleccionar la parte de mi aplicación Rails que necesito (por ejemplo, cosas de ActiveRecord solamente) para que no cargue absolutamente todo para ejecutar algunas pruebas? que tal esto
rake test:recent
No estoy seguro de cómo se integra la tarea rspec con esto, pero definitivamente podría usar la prueba: tarea reciente como plantilla para hacer lo mismo con las pruebas rspec si.
rake test:rspec:recent
no existe todavía