我正在尝试运行使用此处的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 / rubygems / 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:在''
答案 0 :(得分:16)
这是一个开始使用rspec的简单示例。要使一切正常,请执行以下操作:
rspec
spec/bowling_spec.rb
。spec spec/bowling_spec.rb
。此外,可以找到更新的示例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.rb
或spec bowling_spec.rb
,否则将不会加载用于规范的“describe”方法,您将获得其他一些错误。
接下来,这些文件是否在同一目录中?他们需要设置require
行的方式。除此之外,我觉得它看起来还不错。