【问题标题】:RSpec error: Uninitialized constant ModuleName::Chef (NameError)RSpec 错误:未初始化的常量 ModuleName::Chef (NameError)
【发布时间】:2016-09-09 04:20:07
【问题描述】:

我在尝试为我的班级编写 RSpec 测试时遇到错误。

相关类代码如下(class_name.rb):

module ModuleName
  class ClassName < Chef::Knife
  ...
end

我的相关RSpec代码如下:(class_name_spec.rb):

require 'spec_helper'
RSpec.describe ModuleName::ClassName do
  ...
end

而我的spec_helper.rb如下:

require 'rspec'
require 'chef/knife/class_name'

产生的错误如下

C:/.../project_folder/lib/chef/knife/class_name.rb:2:in '<module:ModuleName>': uninitialized constant ModuleName::Chef (NameError)

该代码是我正在为其编写测试的工作代码库,因此我认为这不是 class_name 中的代码的问题。我的 class_name_spec.rb 文件中是否缺少包含语句?还是我的设置方式有问题?

提前致谢!

【问题讨论】:

    标签: ruby rspec chef-infra knife


    【解决方案1】:

    我解决了这个问题。

    原来我需要修改我的spec_helper 如下:

    require 'rspec'
    require 'chef/knife'
    require 'chef/knife/class_name'
    

    这让我很困惑,因为我在“chef/knife”文件夹中没有任何其他文件,但事实证明这就是 ruby​​ 访问 chef gem 的刀部分的方式。如果其他人有什么要补充的,可以进一步启发我,请做。我还是有点迷茫

    【讨论】:

      【解决方案2】:

      在解决您的问题时需要检查的事项:

      确保 Chef gem 位于 Gemfile 中的 :test gem 组中(以便在运行规范时加载)。它应该在group :development, :test。那么……

      改变这一行:

      class ClassName < Chef::Knife
      

      到:

      class ClassName < ::Chef::Knife
      

      也就是说要在根命名空间而不是ModuleName 中查找Chef

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 2017-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多