在铁轨上使用黄瓜作为红宝石,我运行了一个因为愚蠢的原因失败的测试(我做了一个错字)。我解决了这个问题,突然之间,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的经验很少,明显的解决方案让我失望(它抱怨的文件很好,实际上相当可读,没什么奇怪的;再次运行它显示它不仅仅是一个侥幸;破坏了这个特性我修改了什么都没有)。
js_dsl的第3-7行是:
if (func == null) {
jsLanguage.execute_step_definition(regexp);
}
else {
jsLanguage.add_step_definition(regexp, func);
}
},
所以我检查了步骤定义文件,看起来也很好。通常,步骤定义错误会给出错误消息,而不是像这样的完全失败。
答案 0 :(得分:3)
我甚至不......
显然有一种叫做&#34; theRubyRacer&#34;这是我被告知要使用的图像的一部分现在已经过时了#34;这显然意味着,尽管它在十分钟前工作正常,但仍会打破黄瓜#34;不知何故,&#34; simplecov&#34;参与其中,这意味着我现在不知道我应该如何获得作业所需的报道数字,但我不再关心,因为我感到沮丧和困惑,而且它现在有效。这刚开始今天,所以我想在某个地方联系某个服务器的某个地方,告诉它宝石已经过时,因此拒绝使用它?
如果有人有进一步的信息,请告诉我。
由于显然这些链接被封闭,问题是:
所以我发现了问题:
覆盖文件夹。
如果我没有提出要求,那么我可以运行并通过我的黄瓜和rspec测试而没有任何问题&#39; simplecov&#39; SimpleCov.start&#39; rails&#39;在env.rb的顶部。
我的所有步骤都是绿色的,但是如果我添加这两行,我就会得到上面的错误。如果我删除de / coverage文件夹,我可以运行一次测试,但下次再次出现错误。
请帮忙吗?
然后提到的解决方案是
从Gemfile中注释掉这一行并再次运行bundle install:
# gem 'therubyracer'
现在已经过时了。参见:
http://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar#therubyracer
其中说:
如果您以前使用的是therubyracer或therubyracer-heroku,那么这些宝石就不再存在了 由于这些宝石使用了大量的内存,因此需要并强烈劝阻。
答案 1 :(得分:2)
为清楚起见:bec ==捆绑exec黄瓜
它强制exec'd指令使用Gemfile.lock
中指定的gems这两项工作: 因为&amp;&amp;因为功能 /foo.feature
这个没有,抱怨js_dsl.js中的语法错误: 因为foo.feature
cucumber-1.1.9(很可能也是其他版本)假设feature /
答案 2 :(得分:1)
我从正确语法化的javascript中得到了相同的语法错误。
看起来似乎完全不相关,但如果你有
Feature: xyz
@some-tag
Scenario Outline
When I "<foo>"
@some-tag # TRY REMOVING THIS LINE
Examples:
|foo|
|bar|
然后它在我的情况下导致了这个错误。尝试删除第二个标记。标签适用于场景。
答案 3 :(得分:1)
我有这个问题,并意识到我只是愚蠢 我在做:
bundle exec cucumber features/a_switch_store_navigation.feature -tags @foo
而不是:
bundle exec cucumber features/a_switch_store_navigation.feature --tags @foo
(--tags
双击)
答案 4 :(得分:0)
您是在编码引擎吗?因为我遇到了完全相同的问题。我追溯到Cucumber试图通过使用错误的路径从app / assets(认为它们是功能或部分)加载我的.js文件(在调试器中它递归加载来自项目主页的所有文件,即“。”)。
我认为这是因为Cucumber希望功能出现在引擎文件夹中,而不是假人。因此,通过将功能文件夹移动到Engine文件夹,我已设法修复它并且Cucumber现在运行。这样做时,我不得不对env.rb进行一些更改,这些更改在本博客的“Cucumber”部分中描述:http://blog.crowdint.com/2012/03/20/mountable-rails-engines.html
可能有一种方法可以配置Cucumber从虚拟文件夹中获取功能,但我还没有探索过它。
答案 5 :(得分:0)
我也遇到了这个错误,我遇到的问题是有两个./coverage文件夹。我跑'找。 -iname coverage'并删除了不需要的coverage文件夹。
答案 6 :(得分:0)
我正在测试文件上传功能,并使用测试Javascript和CSS文件在测试中使用Rack :: Test :: UploadedFile上传。当我将.js / .css扩展名的JS和CSS重命名为.js.test / .css.test扩展时,这个错误就消失了。