尝试运行rake时rspec错误

时间:2014-06-11 18:01:11

标签: ruby rspec rake

我尝试使用app学院教程自学一些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', '~>3.0.0'c.color = true。现在一切正常(获得一些弃用警告,但没有任何关键),获得教程中的输出。猜猜我只需更新我的rspec并更改Rakefile中的版本。非常感谢你:)

1 个答案:

答案 0 :(得分:2)

您的错误日志显示您处于 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 方法是 - {{1} },#color_enabled#color_enabled=。自 2.99.0 #color?#color#color=后,哪些内容已更改。

我从更改日志获取了我链接的信息 -

  

弃用#color_enabled,#color_enabled =和#color?赞成#color,#color =和#color_enabled?输出。 (Jon Rowe)

因此你需要写为

#color_enabled?

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

我的建议使用Rspec 3.0,至少你会很开心。在这种情况下,请将RSpec.configure do |c| c.fail_fast = true c.color_enabled = true end 还原为color_enabled

希望这会对你有所帮助。