Как устранить проблемы с бесконечным циклом автотеста?
Я использую огурец, rails3, rspec2 и автотест. Я пытаюсь понять, почему мои функции бесконечно зацикливаются. Я подозреваю, что некоторые файлы меняются во время тестов, но я не уверен, какой из них. Я добавил некоторые исключения из моего .autotest
без кубиков.
Можно ли предпринять какие-либо шаги для устранения этой проблемы?
Было бы здорово, если бы я мог видеть, какие файлы запускают повтор или во время выполнения, какие файлы просматриваются/не просматриваются.
здесь мое .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
Ответы
Ответ 1
Хорошо, поэтому я понял это. Я попал в источник автотеста, чтобы лучше понять, что происходит. Он создает Regexp.union из всех исключений и игнорирует файлы, относительные пути которых соответствуют выполняемому выражению.
Чтобы лучше понять ошибку, я добавил все в каталог проекта в .autotest
кроме ./app
, ./lib
, ./public
, ./script
, ./spec
и ./features
. Что-то вроде этого:
# .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
Когда я это сделал, я не получил бесконечный цикл. После этого я только начал комментировать каждое исключение. Оказывается, единственный файл, который мне пришлось проигнорировать вручную, был Gemfile.lock
. По какой-то причине это либо изменяется, либо запутывает автотест до такой степени, что делает цикл огурца.
Таким образом, этот .autotest
решил проблему:
# .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
Я собираюсь сообщать о списке огурцов, чтобы сообщить им, что они должны добавить это к встроенным исключениям автотеста.
Ответ 2
Просто хотел сказать спасибо. Оказывается, для меня это был каталог журнала. Мой файл .autotest
выглядит следующим образом.
# .autotest
Autotest.add_hook :initialize do |at|
# Log directory is causing cucumber to run infinitely.
at.add_exception(%r{^\./log})
end
Для справки см. "Настройка поведения автотеста" в http://github.com/aslakhellesoy/cucumber/wiki/Autotest-Integration, в котором говорится о проблеме с бесконечным циклом.
Ответ 3
В Linux/Unix вы можете использовать команду:
$ find . -mmin -5
чтобы выяснить, какие файлы были изменены за последние 5 минут (или что-то подобное). Это может значительно помочь найти файл, который запускает бесконечный цикл. Затем добавьте исключение, как описано в других ответах.
В моем случае виновник был webrat.log
.
Ответ 4
Стоит отметить, что вы можете передать -v в autospec/autotest, и он распечатает, что вызвало его запуск.
Ответ 5
Поместите свои файлы под контроль версий. Запустите автотест, а затем запустите команду состояния системы VC (например, git status
), чтобы узнать, что изменилось.
PS: Вероятно, это rerun.txt
, которое трогает Cucumber всякий раз, когда вы запускаете функции.
Ответ 6
Вы можете использовать ruby-debug. Затем вы можете добавлять инструкции отладчика в свой код и разрывать их.