Rspec Ruby基本示例错误

时间:2011-02-22 02:55:52

标签: ruby rspec

我正在尝试运行使用此处的rspec的基本启动器示例:http://rspec.info/

当我输入命令提示符

  

ruby​​ bowling_spec.rb

我收到以下错误

测试

# bowling_spec.rb
require 'bowling'

describe Bowling, "#score" do
  it "returns 0 for all gutter game" do
    bowling = Bowling.new
    20.times { bowling.hit(0) }
    bowling.score.should == 0
  end
end

代码

# bowling.rb
class Bowling
  def hit(pins)
  end

  def score
    0
  end
end

错误消息

  

internal:lib / ruby​​gems / custom_require:29:in require': no such file to load -- bowling (LoadError) from <internal:lib/rubygems/custom_require>:29:in require'           来自bowling_spec.rb:2:在''

4 个答案:

答案 0 :(得分:16)

这是一个开始使用rspec的简单示例。要使一切正常,请执行以下操作:

  1. 将您的bowling.rb文件放入 LIB / bowling.rb。
  2. 将您的bowling_spec.rb文件放入 规格/ bowling_spec.rb。
  3. 如果您使用的是rpsec 2,请运行命令rspec spec/bowling_spec.rb
  4. 如果您使用的是rspec 1,请运行命令spec spec/bowling_spec.rb
  5. 此外,可以找到更新的示例here

答案 1 :(得分:4)

在bowling_spec.rb中,更改

require 'bowling'

require './bowling'

ruby​​ 1.9加载路径与ruby 1.8不同,默认情况下不再添加当前目录

答案 2 :(得分:2)

作为解决此类错误消息的一般提示:在99%的情况下,当计算机告诉您无法找到某些内容时,这是因为该内容不存在。在99%的其他案例中,这件事并不是计算机所期望的。

第一个显然不是这里的情况,因为bowling.rb显然确实存在。但是,您的问题完全属于第二个99%:require从Ruby的$LOAD_PATH加载文件文件。但是你没有将bowling.rb放到Ruby的$LOAD_PATH目录中,只需将它放在与bowling_spec.rb相同的目录中。

一个明显的解决方案是将该目录添加到Ruby的$LOAD_PATH。很明显,但是 - 在这种情况下 - 错了。

如果要加载相对于当前正在执行的文件位置的文件,则需要使用require_relative。在这种情况下,这是正确的解决方案。

请注意,为了使describe方法甚至存在,更不用说工作了,您还需要将require 'rspec'添加到spec文件中,或者运行它使用RSpec运行器(即rspec bowling_spec.rb而不是ruby bowling_spec.rb),但这与您看到的问题完全无关。

答案 3 :(得分:1)

首先,从示例中看起来您需要运行rspec bowling_spec.rbspec bowling_spec.rb,否则将不会加载用于规范的“describe”方法,您将获得其他一些错误。

接下来,这些文件是否在同一目录中?他们需要设置require行的方式。除此之外,我觉得它看起来还不错。