tutorial rails crear ruby-on-rails ruby rspec

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

RSpactor.app

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.

http://spork.rubyforge.org/

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

http://www.railsplugins.org/plugins/440-spork


¿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