RSpec error: Uninitialized constant ModuleName::Chef (NameError)

RSpec error: Uninitialized constant ModuleName::Chef (NameError)

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

相关class代码如下(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 文件中是否缺少 include 语句?还是我设置的方式有问题?

提前致谢!

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

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

更改此行:

class ClassName < Chef::Knife

至:

class ClassName < ::Chef::Knife

这表示要在根命名空间而不是 ModuleName 中查找 Chef

我解决了这个问题。

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

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

这让我感到困惑,因为我在 'chef/knife' 文件夹中没有任何其他文件,但事实证明这正是 ruby 访问厨师刀部分的方式 gem.如果其他人有什么要补充的,可以进一步启发我,请做。我仍然对此感到困惑