首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OptionParser类的最小未定方法

OptionParser类的最小未定方法
EN

Stack Overflow用户
提问于 2013-12-15 17:17:49
回答 2查看 748关注 0票数 0

spec_helper中包含一个模块之后,我将为该模块中的一个类运行最小的规范,并得到以下错误:

代码语言:javascript
复制
test_0001_must be true for option name(MyGem::OptionParser::option?):
NoMethodError: undefined method `option?' for OptionParser:Class

我正在测试lib/options/options.rb:

代码语言:javascript
复制
module MyGem
  class OptionParser
    def self.option?(arg)
      arg =~ /^-{1,2}\w+$/
    end
  end
end

使用spec/options_spec.rb:

代码语言:javascript
复制
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::前缀的情况下运行时没有错误。

我的档案结构:

代码语言:javascript
复制
gem/
|-lib/
| |-options/
| | |-options.rb
| |-script.rb
|-spec/
| |-script_spec.rb
| |-options_spec.rb
| |-spec_helper.rb
|-Rakefile

I include MyGem in spec_helper.我出什么问题了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-15 17:45:31

Minitest已经包含或自动加载了Ruby自己的OptionParser,因此这可能是优先考虑并阻止加载您的版本。以下是证据:

代码语言:javascript
复制
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 > 
票数 1
EN

Stack Overflow用户

发布于 2013-12-15 18:33:28

如果您在script.rb文件中定义了完全相同的MyGem::OptionParser,这很可能是导致您的规范中出现问题的原因。尝试为options.rb中的代码使用另一个命名空间,如下所示:

代码语言:javascript
复制
module MyOtherGem
  class OptionParser
    def self.option?(arg)
      arg =~ /^-{1,2}\w+$/
    end
  end
end

然后确保将其包含在您的spec_helper或options_spec文件中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20597392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档