无法在Windows环境下使用Ruby 2.x运行Cucumber

4
当我运行cucumber时,我会收到以下信息:
*** WARNING: You must use ANSICON 1.31 or higher (http://adoxa.110mb.com/ansicon) to get coloured output on Windows
Warning: you should require 'minitest/autorun' instead.
Warning: or add 'gem "minitest"' before 'require "minitest/autorun"'
From:
  C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb:3:in `<top (required)>'
  C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/runtime.rb:21:in `initialize'
  C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/cli/main.rb:40:in `new'
  C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/cli/main.rb:40:in `execute!'
  C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/cli/main.rb:20:in `execute'
  C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/bin/cucumber:14:in `<top (required)>'
  C:/RailsInstaller/Ruby2.1.0/bin/cucumber:23:in `load'
  C:/RailsInstaller/Ruby2.1.0/bin/cucumber:23:in `<main>'
MiniTest::Unit::TestCase is now Minitest::Test. From     C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/test/unit/testcase.rb:8:in `<module:Unit>'
undefined method `_run_suite' for class `Test::Unit::Runner' (NameError)
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/test/unit.rb:676:in `<class:Runner>'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/test/unit.rb:261:in `<module:Unit>'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/test/unit.rb:15:in `<module:Test>'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/test/unit.rb:7:in `<top (required)>'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb:25:in `<top (required)>'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/runtime.rb:21:in `initialize'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/cli/main.rb:40:in `new'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/cli/main.rb:40:in `execute!'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/lib/cucumber/cli/main.rb:20:in `execute'
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/cucumber-1.2.1/bin/cucumber:14:in `<top (required)>'
C:/RailsInstaller/Ruby2.1.0/bin/cucumber:23:in `load'
C:/RailsInstaller/Ruby2.1.0/bin/cucumber:23:in `<main>'

bundle list 给我以下结果:

DL is deprecated, please use Fiddle
Gems included by the bundle:
  * builder (3.2.2)
  * bundler (1.7.7)
  * cucumber (1.2.1)
  * diff-lcs (1.1.3)
  * gherkin (2.11.8)
  * json (1.8.1)
  * minitest (4.7.5)
  * multi_json (1.10.1)
  * rspec-expectations (2.11.2)

根据stackoverflow上类似的问题,我在`features\support\env.rb'中添加了以下内容:

require 'minitest'
module MiniTestAssertions
  def self.extended(base)
    base.extend(MiniTest::Assertions)
    base.assertions = 0
  end

  attr_accessor :assertions
end
World(MiniTestAssertions)

如何让cucumber正常工作?

编辑:

我尝试在完全空的目录中运行cucumber(期望收到警告,说明未定义任何特性),但是收到完全相同的消息:有关minitest的警告,然后是关于undefined method '_run_suite'的错误。我找到的所有关于此的网络信息都与Rails(我未使用)相关,或者说这是一个已经修复的旧问题,因此我完全陷入了困境。 :(


你是想用Minitest还是RSpec进行测试?(你可以使用Cucumber来进行任何一种测试,但这更适用于RSpec,通常不需要Minitest)。 - joelparkerhenderson
我更喜欢使用RSpec,但似乎我还没有被给予选择的机会!(我只是按照《黄瓜书》中的说明进行操作,在另一台安装了Ruby 1.9而非2.x的机器上运行良好)。我该如何说服它使用RSpec? - digitig
2个回答

0

你为什么不能使用 Ruby 1.9 来完成这个练习呢?

最新版本的《Cucumber Book》- 版本3.0 - 发布于2014年3月,当时 Ruby 1.9.3 是最常用的版本。

该书的代码是使用 ruby 1.9.3-p194 进行测试的(如在“附录2 - 安装 Cucumber”一节中所述)。

作者/Pragprog 可能会推出新版书,在那时他们将确保书中的代码可以在 ruby 2.2 或当时最常用的 Ruby 版本上运行。

完全有可能弄清楚如何使这些示例适用于 ruby 2.0 或更高版本,但我建议你现在不要担心这个问题。考虑到你刚开始学习 Cucumber,最好按照书中推荐的版本进行操作。

熟悉了 Cucumber 和 Ruby 世界的其他组件后,你会理解为什么我觉得“如何说服它使用 RSpec?”非常有趣。:-)


我实际上已经在Ruby 1.9.3下使用Cucumber将近一年了。但是我现在在另一台电脑上使用Ruby 2.x,并回到《Cucumber Book》上,以便刷新如何设置初始Cucumber配置的记忆。是的,我知道Cucumber和RSpec扮演不同的角色,但我遇到的错误特别涉及minitest,据我所知,它执行的功能更接近于RSpec而不是Cucumber。 - digitig

-1

正如您所知,配置开发环境是一项繁琐且容易出错的任务。我更喜欢在*nix类型的环境中工作,您可以使用VirtualBox或某些Docker-for-Windows安排在Windows上实现这一点。

如果您能够成功地运行此类Docker配置,则这可能是解决问题的最佳选择,因为Docker专注于共享/重用预配置的环境/部署,这可以节省大量时间!已经有一些很好的Dockerfile配置,应该可以帮助您看到要安装哪些组件。请参见:thisthat

顺便说一句,如果您更喜欢使用rspec而不是minitest(谁不喜欢呢?),则需要使用一些示例代码,其中不包括“require'minitest'”。如果您只对当前的示例感兴趣,请考虑遵循错误消息给出的想法,即“require'minitest/autorun'”。希望这可以帮助您——祝您好运!


这需要在Windows下工作。更改操作系统(或在虚拟机中运行)不是一个选项。是的,我尝试过 require 'minitest/autorun - digitig
你有没有查看Dockerfiles以获取正确安装组件的想法?多好啊,在这里提供一个可能的(鉴于你未提及限制)替代方案,却被踩了。而另一个答案基本上建议你根本不要做你想做的事情。 - unigeek
据我所知,Docker也是一种虚拟机,因此它并不是解决方案。我的问题明确指出了在Windows下;使用不同的操作系统并不能回答我的问题(但每当我问有关Ruby配置问题时,我都会得到这样烦人的回复)。两个答案都没有真正回答我的问题,但另一个答案是我可以作为备选方案的东西,如果我无法让2.x工作,那么你的答案就不行。这通常不值得被downvote,但StackOverflow即将自动分配赏金,第一个答案更值得,而我不确定如何更好地引导它。 - digitig
并没有特别意识到这里有赏金...不管怎样,如果你深入挖掘docker文件,即使这些文件明显是针对Unix的,也可能会有所帮助,以便查看应安装哪些组件。顺便说一下,很抱歉你对Unix有这样的感觉。 - unigeek
哦,我并不反对Unix - 只是我不能选择在工作中使用的操作系统,所以不断回响的“不要在Windows中做”并没有什么帮助。如果我记得的话,几天后我会撤销这个负评,因为我实际上并不想因试图提供帮助而损害你的声誉 - 正如我所说,这是我能想到的管理赏金的唯一方法(好吧,另一种方法是将不是答案的东西标记为答案)。 - digitig
所以,看起来你可能有一个环境配置问题。Docker可以帮助解决这个问题,并且速度很快。我听说过微软支持Docker和Windows的Docker客户端。现在我看到微软的支持Docker是针对他们的Azure云服务(直到现在才知道他们在云中提供Linux盒子)。看起来你是正确的,他们的Windows客户端只是启动了一个虚拟机,这相当糟糕,我认为。无论如何,我的本意是好的。很抱歉你没有比Windows更好的选择。 - unigeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接