包含模块在gem中不起作用

时间:2018-06-27 01:03:40

标签: ruby rspec rubygems

我有一个名为private_lib的宝石。 文件lib/private_lib.rb包含以下内容:

require 'private_lib/version'
require 'private_lib/handicap'
require 'private_lib/traversal_cap'

module PrivateLib

end

lib/private_lib/handicap.rb文件包含以下内容

# module for handicap functions
class Handicap
  include TraversalCap
  -- other code
end

文件lib/private_lib/traversal_cap.rb包含以下内容

module TraversalCap
  def some_method
  end
  -- other code
end

我还有一个测试文件spec/handicap_spec.rb,其中包含以下内容

require "spec_helper"
describe Handicap do
  include TraversalCap
  -- some tests that access the ```Handicap``` class
  -- some tests that access directly the traversal_cap some_method.
end

运行rspec spec/handicap_spec时,出现以下错误

private_lib/lib/private_lib/handicap.rb:3:in `<class:Handicap>': uninitialized constant Handicap::TraversalCap (NameError)
    from private_lib/lib/private_lib/handicap.rb:2:in `<top (required)>'

障碍类为什么没有看到traversal_cap模块?

1 个答案:

答案 0 :(得分:1)

这是因为您需要文件的顺序。

在运行行require 'private_lib/handicap'时,它会读取handicap.rb文件并命中您include TraversalCap所在的行。但是您目前尚未运行require 'private_lib/traversal_cap',因此该模块未定义。

快速解决方案是更改require调用的顺序,或者将require 'private_lib/traversal_cap'放在让分文件的顶部。