Я использую огурец, 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
Хорошо, я понял это. Я заглянул в исходники autotest'а, чтобы лучше понять, что происходит. Он создает 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 до такой степени, что заставляет cucumber зацикливаться.
Таким образом, этот .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
Я собираюсь сообщить об этом в список cucumber, чтобы они знали, что им следует добавить это к встроенным исключениям autotest.
Поместите ваши файлы под контроль версий. Запустите autotest, а затем выполните команду status вашей системы VC (например, git status
), чтобы посмотреть, что изменилось.
PS: Возможно, это rerun.txt
, к которому Cucumber обращается всякий раз, когда вы запускаете функции.
Вы можете использовать ruby-debug . Тогда вы сможете добавлять в код отладочные утверждения и прерывать их .