Cucumber утверждает, что его файлы поддержки не работают? - PullRequest
9 голосов
/ 25 марта 2012

Используя огурец для рубина на рельсах, я провел тест, который не удался по глупой причине (я сделал опечатку).Я исправил проблему, и внезапно Cucumber больше не запускается.Я не изменил ни одного файла, на который он ссылается:

/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/js_support/js_dsl.js:3: 
syntax error, unexpected '{', expecting keyword_then or ';' or '\n'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/js_support/js_dsl.js:6: syntax error, unexpected keyword_else, expecting '}'
    else {
        ^
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/js_support/js_dsl.js:7: syntax error, unexpected ';', expecting tASSOC
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-

1.1.8/lib/cucumber/js_support/js_dsl.js:13: syntax error, unexpected ',', expecting $end (SyntaxError)
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:234:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:234:in `block in load'
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:225:in `load_dependency'
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:234:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/js_support/js_language.rb:114:in `initialize'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime/support_code.rb:74:in `new'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime/support_code.rb:74:in `load_programming_language'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime/support_code.rb:185:in `programming_language_for'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime/support_code.rb:169:in `load_file'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime/support_code.rb:83:in `block in load_files!'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime/support_code.rb:82:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime/support_code.rb:82:in `load_files!'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime.rb:175:in `load_step_definitions'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/runtime.rb:40:in `run!'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/cli/main.rb:43:in `execute!'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/lib/cucumber/cli/main.rb:20:in `execute'
/usr/local/lib/ruby/gems/1.9.1/gems/cucumber-1.1.8/bin/cucumber:14:in `<top (required)>'
/usr/local/bin/cucumber:19:in `load'
/usr/local/bin/cucumber:19:in `<main>'

Очевидно, что что-то пошло ужасно неправильно.Мой вопрос просто, как мне исправить это?Это известная ошибка?Могу ли я переустановить огурец?Весь стек?У меня очень мало опыта работы с Rails и Cucumber, и очевидные решения меня подводят (файл, на который он жалуется, хорош, на самом деле довольно читабелен, ничего странного в этом нет; повторный запуск показывает, что это не просто случайность; нарушение функцииЯ ничего не исправил)

Строки 3-7 в js_dsl:

 if (func == null) {
      jsLanguage.execute_step_definition(regexp);
    }
    else {
      jsLanguage.add_step_definition(regexp, func);
    }
  },

Итак, я проверил файл определения шага, и он тоже выглядит хорошо.Обычно неверное определение шага выдает сообщение об ошибке, а не полный сбой, подобный этому.

Ответы [ 7 ]

3 голосов
/ 25 марта 2012

Я даже не ...

Мои одноклассники обнаружили проблему здесь и решение здесь

Очевидно, что то, что называется "theRubyRacer", которое было частью изображения, которое мне сказали использовать, теперь "устарело", что, очевидно, означает "ломает огурец, несмотря на то, что он работал нормально десять минут назад". Каким-то образом задействован «simplecov», то есть я теперь понятия не имею, как мне получить цифры покрытия, необходимые для выполнения задания, но мне уже все равно, потому что я разочарован и смущен, и теперь это работает. Это только началось сегодня, так что я думаю, что-то где-то связалось с сервером, который сказал, что этот камень устарел, и поэтому отказался его использовать?

Если у кого-то есть дополнительная информация, пожалуйста, дайте мне знать.


Поскольку эти ссылки, по-видимому, замурованы, проблема была:

Итак, я определил проблему:

Папка покрытия.

Я могу запускать и проходить тесты на огурец и rspec без каких-либо проблем, если я не поставлю требуемый 'simplecov' SimpleCov.start 'rails' в начале env.rb.

Все мои шаги зеленые, но если я добавлю эти две строки, я получу ошибку выше. Если я удаляю папку de / охват, я могу запустить тест один раз, но в следующий раз ошибка будет воспроизведена снова.

Любая помощь, пожалуйста?

и тогда упомянутое решение было

Прокомментируйте эту строку из Gemfile и снова запустите установку пакета:

# gem 'therubyracer'

Это сейчас устарело. См:

http://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar#therubyracer

Что говорит:

Если вы ранее использовали therubyracer или therubyracer-heroku, эти камни больше не будут требуется и настоятельно не рекомендуется, поскольку эти драгоценные камни используют очень большой объем памяти.

2 голосов
/ 05 апреля 2012

Для наглядности: bec == bundle exec cucumber

Вынуждает директиву exec'd использовать драгоценные камни, как указано в Gemfile.lock

Эти две работы: bec && bec функции / foo.feature

Этот не жалуется на синтаксические ошибки в js_dsl.js: bec foo.feature

cucumber-1.1.9 (и, скорее всего, и другие версии) предполагает наличие функций /

1 голос
/ 02 марта 2013

У меня была эта проблема, и я понял, что просто глупо.
Я делал:

bundle exec cucumber features/a_switch_store_navigation.feature -tags @foo

вместо:

bundle exec cucumber features/a_switch_store_navigation.feature --tags @foo

(--tags двойной тире)

1 голос
/ 07 сентября 2012

Я получаю ту же синтаксическую ошибку из того же бита правильно синтаксического JavaScript.

Это может показаться совершенно не связанным, но если у вас есть

Feature: xyz

  @some-tag
  Scenario Outline
  When I "<foo>"

  @some-tag # TRY REMOVING THIS LINE
  Examples: 
  |foo|
  |bar|

, то это вызвало эту ошибку вмое дело.Попробуйте удалить второй тег.Теги для сценариев.

0 голосов
/ 22 ноября 2013

Я тестировал функцию загрузки файлов и использовал тестовый Javascript и CSS-файл для загрузки в тестах с использованием Rack :: Test :: UploadedFile. Когда я переименовал JS и CSS из расширений .js / .css в расширения .js.test / .css.test, эта ошибка исчезла.

0 голосов
/ 22 февраля 2013

Я также получил эту ошибку, проблема была в том, что там было две папки ./coverage. Я побежал найти. -iname cover 'и удалил папку покрытия, которая не была обязательной.

0 голосов
/ 18 февраля 2013

Вы кодируете Двигатель?Потому что я был, когда столкнулся с точно такой же проблемой.Я проследил это до того, как Cucumber пытался загрузить мои файлы .js из app / assets (думая, что они являются функциями или их частями), используя неверные пути (в отладчике он рекурсивно загружал все файлы из проекта домой, то есть «.»).

Я думаю, это происходит потому, что Cucumber ожидает, что функции будут присутствовать в папке движка, а не в фиктивном.Так что, переместив папку с функциями в папку Engine, мне удалось это исправить, и теперь Cucumber запускается.При этом мне пришлось внести некоторые изменения в env.rb, которые описаны в разделе «Cucumber» в этом блоге: http://blog.crowdint.com/2012/03/20/mountable-rails-engines.html

Возможно, есть способ настроить Cucumber для получения функций изфиктивная папка, но я ее не исследовал.

...