Как я диагностирую автотестовые проблемы бесконечного цикла?

Я использую огурец, 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
12
задан Dane O'Connor 6 July 2010 в 22:46
поделиться

3 ответа

Хорошо, я понял это. Я заглянул в исходники 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.

15
ответ дан 2 December 2019 в 04:25
поделиться

Поместите ваши файлы под контроль версий. Запустите autotest, а затем выполните команду status вашей системы VC (например, git status), чтобы посмотреть, что изменилось.

PS: Возможно, это rerun.txt, к которому Cucumber обращается всякий раз, когда вы запускаете функции.

1
ответ дан 2 December 2019 в 04:25
поделиться

Вы можете использовать ruby-debug . Тогда вы сможете добавлять в код отладочные утверждения и прерывать их .

0
ответ дан 2 December 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: