RSpec错误:未初始化的常量ModuleName :: Chef(NameError)

时间:2016-09-08 15:55:57

标签: ruby rspec chef knife

我在尝试为我的班级编写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文件中缺少include语句吗?或者我设置它的方式有问题吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

解决问题的方法:

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

更改此行:

class ClassName < Chef::Knife

为:

class ClassName < ::Chef::Knife

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

答案 1 :(得分:0)

我解决了这个问题。

事实证明,我需要修改我的spec_helper如下:

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

这使我感到困惑,因为我没有“厨师/刀”中的任何其他文件。文件夹,但事实证明这是红宝石如何访问厨师宝石的刀部分。如果有其他人有东西需要添加,这将进一步启发我,请做。我仍然对此感到困惑