Подтвердить что ты не робот

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

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

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