【问题标题】:rspec bugs when trying to run rake尝试运行 rake 时出现 rspec 错误
【发布时间】:2014-06-11 18:01:10
【问题描述】:

我正在尝试使用 app academy 教程自学一些 ruby​​,在完成阅读后,安装 rvm、rubygems 和 rspec2,当我什至尝试使用 rake 运行第一个最基本的代码 (00_hello) 时,我得到了整个错误:

 (in /home/deadpool/Documents/learn_ruby)
/home/deadpool/Documents/learn_ruby/rspec_config.rb:3:in `block in <top (required)>': undefined method `color=' for #<RSpec::Core::Configuration:0x0000000293dee0> (NoMethodError)
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core.rb:67:in `configure'
    from /home/deadpool/Documents/learn_ruby/rspec_config.rb:1:in `<top (required)>'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/configuration.rb:162:in `require'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/configuration.rb:162:in `block in requires='
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/configuration.rb:162:in `map'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/configuration.rb:162:in `requires='
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/configuration_options.rb:22:in `block in configure'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/configuration_options.rb:21:in `each'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/configuration_options.rb:21:in `configure'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/command_line.rb:17:in `run'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/runner.rb:55:in `run_in_process'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/runner.rb:46:in `run'
    from /home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/runner.rb:10:in `block in autorun'
rake aborted!
ruby -S bundle exec rspec -I/home/deadpool/Documents/learn_ruby/00_hello -I/home/deadpool/Documents/learn_ruby/00_hello/solution -f documentation -r ./rspec_config "/home/deadpool/Documents/learn_ruby/00_hello/hello_spec.rb" failed
/home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/rake_task.rb:117:in `rescue in block (2 levels) in initialize'
/home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/rake_task.rb:113:in `block (2 levels) in initialize'
/home/deadpool/.rvm/gems/ruby-2.0.0-p481/gems/rspec-core-2.0.0/lib/rspec/core/rake_task.rb:109:in `block in initialize'
Tasks: TOP => default => spec
(See full trace by running task with --trace)

我试图用谷歌搜索一些错误,但没有成功。我之前使用 rspec v2 的 rake 文件有另一个错误,当前版本是 3.0.0,所以我必须安装旧版本,我认为这可能是另一个设置问题。感谢有人可以帮助我或指导我。

rspec_config.rb 文件:

RSpec.configure do |c|
    c.fail_fast = true
    c.color = true
end

hello.rb 文件:

def hello
   "Hello!"
end

def greet(who)
   "Hello, #{who}!"
end

更新

得到新的错误:-

虽然我将c.color = true 更改为c.color_enabled = true

(in /home/deadpool/Documents/learn_ruby)
the hello function says hello (FAILED - 1)

Failures: 1) the hello function says hello Failure/Error: 
Unable to find matching line from backtrace undefined method run_all' for []:Array 
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/hooks.rb:116:inrun_hook_filtered' 
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/example_group.rb:176:in eval_before_alls'
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/example_group.rb:231:inrun'
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/command_line.rb:26:in block (2 levels) in run'
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/command_line.rb:26:inmap'
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/command_line.rb:26:in block in run' 
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/reporter.rb:11:inreport'
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/command_line.rb:23:in run' 
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/runner.rb:55:inrun_in_process' 
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/runner.rb:46:in run'
# /home/deadpool/.rvm/gems/ruby-2.1.2/gems/rspec-core-2.0.0/lib/rspec/core/runner.rb:10:inblock in autorun'

更新

hello_spec.rb 文件:

require "hello"

describe "the hello function" do
  it "says hello" do
    hello.should == "Hello!"
  end
end

describe "the greet function" do
  it "says hello to someone" do
    greet("Alice").should == "Hello, Alice!"
  end

  it "says hello to someone else" do
    greet("Bob").should == "Hello, Bob!"
  end
end

更新 因此,我将 rspec 更新为 v3.0.0 并将 Rakefile gem 'rspec', '~&gt;3.0.0' 和 c.color = true 改回来。现在一切正常(得到一些弃用警告,但没有什么重要的),得到教程中的输出。猜猜我只需要更新我的 rspec 并更改 Rakefile 中的版本。非常感谢:)

【问题讨论】:

  • 向我们展示您的.rb 文件。
  • 给我们看rspec_config.rb文件的内容。
  • 在您的问题本身中发布此内容,而不是在评论中..
  • 使用c.color_enabled = true 告诉我结果。
  • 请不要更改原来的问题..

标签: ruby rspec rake


【解决方案1】:

您的错误日志显示您处于 rspec-core-2.0.0 版本并且您的错误是 -

rspec_config.rb:3:in `block in <top (required)>': undefined method `color=' for 
#<RSpec::Core::Configuration:0x0000000293dee0> (NoMethodError)

现在Deprecate config options 确认 2.99.0.rc1 / 2014-05-18 或 2.99.0 方法的以下版本是 - #color_enabled, @987654328 @ 和 #color?。从 2.99.0 更改为 #color、#color= 和 #color_enabled?。

我在链接时从 changelog 中获得了信息 -

弃用#color_enabled、#color_enabled= 和#color?支持#color、#color= 和#color_enabled?输出。 (乔恩·罗)

所以你需要写成

RSpec.configure do |c|
    c.fail_fast = true
    c.color_enabled = true
end

关于您的新错误,我发现它是bug undefined methodrun_all' for []:Array`。已修复in this patch。检查这个Rspec issue。

我的建议是使用Rspec 3.0,至少你会很开心。在这种情况下,将color_enabled 还原为color。

希望这会对你有所帮助。

【讨论】:

  • @LexxN 您的错误是新的,而不是之前的错误。这证实了,这个答案解决了前面的错误。
  • 所以我应该针对新错误再问一个问题?
  • @LexxN 我在您的帖子评论中提出的问题告诉我。显示您为测试方法而编写的 Rspec 代码。
  • 我正在用 hello.rb 文件测试它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
相关资源
最近更新 更多