在spec_helper中包含一个模块之后,我将为该模块中的一个类运行最小的规范,并得到以下错误:
test_0001_must be true for option name(MyGem::OptionParser::option?):
NoMethodError: undefined method `option?' for OptionParser:Class我正在测试lib/options/options.rb:
module MyGem
class OptionParser
def self.option?(arg)
arg =~ /^-{1,2}\w+$/
end
end
end使用spec/options_spec.rb:
describe OptionParser do
describe "option?" do
it "must be true for option name" do
OptionParser.option?('--nocolor').must_equal true
end
end
end使用MyGem::OptionParser而不是只运行OptionParser运行测试不会导致错误。但是,lib/script.rb上的类似测试在没有MyGem::前缀的情况下运行时没有错误。
我的档案结构:
gem/
|-lib/
| |-options/
| | |-options.rb
| |-script.rb
|-spec/
| |-script_spec.rb
| |-options_spec.rb
| |-spec_helper.rb
|-RakefileI include MyGem in spec_helper.我出什么问题了?
发布于 2013-12-15 17:45:31
Minitest已经包含或自动加载了Ruby自己的OptionParser,因此这可能是优先考虑并阻止加载您的版本。以下是证据:
MacbookAir1:so1 palfvin$ irb
2.0.0p247 :001 > OptionParser
NameError: uninitialized constant OptionParser
from (irb):1
from /Users/palfvin/.rvm/rubies/ruby-2.0.0-p247/bin/irb:16:in `<main>'
2.0.0p247 :002 > require 'minitest'
=> true
2.0.0p247 :003 > OptionParser
=> OptionParser
2.0.0p247 :004 > 发布于 2013-12-15 18:33:28
如果您在script.rb文件中定义了完全相同的MyGem::OptionParser,这很可能是导致您的规范中出现问题的原因。尝试为options.rb中的代码使用另一个命名空间,如下所示:
module MyOtherGem
class OptionParser
def self.option?(arg)
arg =~ /^-{1,2}\w+$/
end
end
end然后确保将其包含在您的spec_helper或options_spec文件中。
https://stackoverflow.com/questions/20597392
复制相似问题