【发布时间】:2015-09-20 03:25:46
【问题描述】:
我正在尝试在我的自动化测试套件中设置 Cucumber。我目前使用的是 Ruby 2.0,但 Ruby 2.2 也有同样的问题。
我尝试过 Cucumber 2.0.0 和 2.0.0.beta.3。它们似乎都不兼容 Ruby 2.0 或 2.2。
每次我尝试运行我的 .feature 文件之一时,都会收到相同的错误。 Cucumber 声称与任何版本的 Ruby >= 1.9.3 (https://rubygems.org/gems/cucumber) 兼容,但事实并非如此。
有没有其他人看到这个错误?有没有其他人成功地将 Cucumber 2.0.0 与 Ruby 2.0 或 2.2 一起使用?如果是这样,您的 Gemfile 中有哪些 gem,运行 ruby --version 时会显示哪些特定的 ruby 更新/版本?
**如果我恢复到旧版本的 Cucumber(我尝试了 1.3.3),我可以正确运行我的 .feature 文件。但是我正在从头开始构建一个新的测试套件,并想借此机会使用所有可能的 gem 的最新和最好的版本。我不想围绕已弃用的 Cucumber 版本构建我的 Gemfile。
`Cucumber::Ast` no longer exists. These classes have moved into the `Cucumber::Core::Ast` namespace, but may not have the same API. (RuntimeError)
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/ast.rb:10:in `const_missing'
C:/Program Files (x86)/JetBrains/RubyMine 6.3/rb/testing/patch/bdd/teamcity/cucumber/common.rb:210:in `scenario_outline?'
C:/Program Files (x86)/JetBrains/RubyMine 6.3/rb/testing/patch/bdd/teamcity/cucumber/common.rb:218:in `tc_before_feature_element'
C:/Program Files (x86)/JetBrains/RubyMine 6.3/rb/testing/patch/bdd/teamcity/cucumber/formatter_03103.rb:98:in `before_feature_element'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/ignore_missing_messages.rb:10:in `method_missing'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/legacy_api/adapter.rb:521:in `before'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/legacy_api/adapter.rb:394:in `switch_to_child'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/legacy_api/adapter.rb:316:in `switch_step_container'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/legacy_api/adapter.rb:242:in `after_test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/legacy_api/adapter.rb:85:in `after_test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/legacy_api/adapter.rb:37:in `after_test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/fanout.rb:16:in `block in method_missing'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/fanout.rb:15:in `each'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/formatter/fanout.rb:15:in `method_missing'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:18:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/filters/prepare_world.rb:11:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_around_hooks.rb:8:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_after_hooks.rb:5:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_before_hooks.rb:5:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_after_step_hooks.rb:8:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/filters/activate_steps.rb:8:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/filters/quit.rb:11:in `test_case'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/locations_filter.rb:17:in `block in done'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/locations_filter.rb:16:in `each'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/locations_filter.rb:16:in `done'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/filter.rb:61:in `done'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/tag_filter.rb:18:in `done'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/compiler.rb:23:in `done'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core/gherkin/parser.rb:31:in `done'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core.rb:29:in `parse'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-core-1.1.3/lib/cucumber/core.rb:18:in `compile'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/runtime.rb:70:in `run!'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/lib/cucumber/cli/main.rb:38:in `execute!'
C:/Ruby200/lib/ruby/gems/2.0.0/gems/cucumber-2.0.0/bin/cucumber:9:in `<top (required)>'
C:/Ruby200/bin/cucumber:23:in `load'
C:/Ruby200/bin/cucumber:23:in `<top (required)>'
-e:1:in `load'
**更新:当我通过Windows Shell 运行文件时,它运行成功,没有错误。
【问题讨论】:
-
这看起来像是 RubyMine 的问题。您可以尝试在终端/PowerShell/cmd 中运行某个功能吗?
-
当我使用
cucumber <feature file>运行时,我收到一条错误消息,指出步骤未定义,但已定义。它们位于step definitions目录中,它们应该位于... -
功能文件的路径是什么?它是否位于 features 下的子目录中?听起来您需要稍微不同地调用 Cucumber:
cucumber -r features features/<path_to_feature_file>。 -
我的功能文件名为android_phone_responsiveness.feature,位于
C:\workspace\inside_test_automation\features\scenarios。我的步骤定义位于C:\workspace\inside_test_automation\features\step_definitions -
当我运行
cucumber -r features features/C:\workspace\inside_test_automation\features\scenarios\android_phone_responsiveness.feature时出现错误,我将在我的 OP 中发布堆栈跟踪的屏幕截图。
标签: ruby rubygems cucumber rubymine