2010-07-06 13 views
12

Estoy usando pepino, rieles3, rspec2 y autotest. Estoy tratando de descubrir por qué mis características son infinitamente cíclicas. Sospecho que se modificó algún archivo durante las pruebas, pero no estoy seguro de cuál. He agregado algunas excepciones a mi .autotest sin dados.¿Cómo soluciono los problemas de autotest infinite loop problems?

¿Hay algún paso que pueda tomar para solucionar este problema?

Sería genial si pudiera ver qué archivos están desencadenando una repetición o, en tiempo de ejecución, qué archivos están siendo vistos/no vistos.

aquí está mi contenido .autotest

require 'autotest/growl' 

Autotest::Growl::clear_terminal = false 

# Skip some paths 
Autotest.add_hook :initialize do |autotest| 
    %w{.git .DS_store db log tmp rerun.txt}.each { |e| autotest.add_exception(e) } 
end 

Respuesta

15

Ok, así que lo descubrí. Me sumergí en la fuente de autotest para tener una mejor comprensión de lo que estaba pasando. Crea una Regexp.union de todas las excepciones e ignora los archivos cuyas rutas relativas coinciden con la expresión compilada.

Para comprender mejor el error añadí todo en el directorio de mi proyecto para .autotest excepto ./app, ./lib, ./public, ./script, ./spec y ./features. Algo como esto:

# .autotest - to troubleshoot 
Autotest.add_hook :initialize do |at| 
    at.add_exception(%r{^\./\.git}) 
    ... 
    at.add_exception(%r{^\./db}) 
    ... 
    at.add_exception(%r{^\./rerun.txt}) 
    ... 
end 

Cuando hice esto no obtuve un ciclo infinito. Después de eso comencé a comentar cada excepción. Resulta que el único archivo que tuve que ignorar manualmente fue Gemfile.lock. Por alguna razón, esto se está modificando o confundiendo el autotest hasta el punto en que se produce el ciclo de pepino.

Por lo tanto, este .autotest resuelto el problema:

# .autotest - to fix 
Autotest.add_hook :initialize do |at| 
    # Gemfile.lock is causing cucumber to run infinitely. Don't watch it. 
    at.add_exception(%r{^\./Gemfile.lock}) 
end 

Voy a informar sobre la lista de pepino para hacerles saber que deberían añadir que a la incorporada en las excepciones autotest.

+0

Gracias por compartir esto. – zetetic

+3

Intenté exceptuar solo en Gemfile.lock, pero eso no funcionó. Terminé usando lo siguiente: Autotest.add_hook: initialize do | at | % w {.svn .hg .git proveedor rerun.txti db log tmp .DS_store Gemfile.lock} .each {| exception | at.add_exception (exception)} end – localshred

+0

Decir que autotest ignore 'Gemfile.lock' funcionó para mí. Parecía que mientras ejecutaba mis especificaciones, 'Gemfile.lock' estaba siendo alterado (las dependencias de mi línea 'gem' capistrano'' se alteraron durante la prueba, y luego volvieron luego ... extraño). –

0

Puede utilizar ruby-debug. A continuación, puede agregar instrucciones de depuración en su código y romperlas.

+0

Ok Puedo manejar eso, pero una vez que rompo, ¿cómo puedo inspeccionar la Autoprueba? No estoy seguro de dónde buscar para adentrarme en sus aspectos internos y ver por qué está haciendo lo que está haciendo. –

1

Ponga sus archivos bajo control de versión. Ejecute el autoprueba y luego ejecute el comando de estado del sistema de VC (por ejemplo, git status) para ver qué cambió.

PD: Probablemente sea rerun.txt, que toca Pepino cada vez que ejecuta funciones.

+0

usando git. El estado informa que nada ha cambiado (probablemente ignoro el archivo que se cambia, _si_ hay uno). También agregué rerun.txt a mis excepciones de autotest. Respuesta actualizada para incluir mi contenido .autotest. –

+0

Aunque es una idea interesante, probaré una nueva compra y rastrearé todo para ver si eso ayuda. –

+0

2 archivos que se están modificando (según git) son db/test.sqlite3 y log/test.log. Parece que .autotest debería decir a autotest que no los mire. Estoy seguro de que los carriles de pepino tienen esto incorporado también. ¿Mi look .autotest está apagado? –

7

Solo quería decir gracias. Resulta que, para mí, era el directorio de registro. Mi archivo .autotest tiene este aspecto.

# .autotest 
Autotest.add_hook :initialize do |at| 
    # Log directory is causing cucumber to run infinitely. 
    at.add_exception(%r{^\./log}) 
end

Como referencia, consulte "Comportamiento Personalización de autocomprobación" en http://github.com/aslakhellesoy/cucumber/wiki/Autotest-Integration, que habla sobre el problema bucle infinito.

6

En Linux/Unix puede utilizar el comando:

$ find . -mmin -5 

de averiguar qué archivos fueron modificados en los últimos 5 minutos (o lo que sea lapso es apropiado). Esto puede ser de gran ayuda para encontrar el archivo que está activando el ciclo infinito. A continuación, agregue la excepción como se explica en las otras respuestas.

En mi caso, el culpable era webrat.log.

5

Vale la pena señalar que puede pasar -v a autospec/autotest e imprimirá qué lo activó.

+0

gran pista, gracias! –

+0

¡Ah, información crucial! – Felixyz