Как устранить неполадки с бесконечным циклом автотеста? - PullRequest
12 голосов
/ 07 июля 2010

Я использую огурец, 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

Ответы [ 6 ]

15 голосов
/ 08 июля 2010

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

Я собираюсьсообщите в список огурцов, чтобы сообщить им, что они должны добавить это к исключениям встроенного автотеста.

7 голосов
/ 10 декабря 2010

Просто хотел сказать спасибо. Оказывается, для меня это был каталог журналов. Мой .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,, где говорится о проблеме бесконечного цикла.

6 голосов
/ 21 апреля 2011

В Linux / Unix вы можете использовать команду:

$ find . -mmin -5

, чтобы выяснить, какие файлы были изменены за последние 5 минут (или любой другой промежуток времени, который подходит) Это может очень помочь в поиске файла, который запускает бесконечный цикл. Затем добавьте исключение, как описано в других ответах.

В моем случае виновником было webrat.log.

5 голосов
/ 28 февраля 2012

Стоит отметить, что вы можете передать -v в autospec / autotest, и он распечатает то, что вызвало его запуск.

1 голос
/ 07 июля 2010

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

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

0 голосов
/ 07 июля 2010

Вы можете использовать ruby-debug . Затем вы можете добавить операторы отладчика в свой код и использовать их.

...