2016-09-08 5 views
1

Я получаю сообщение об ошибке при попытке написать RSpec-тест для моего класса.Ошибка RSpec: Неинициализированная константа ModuleName :: Chef (NameError)

Соответствующий код класса выглядит следующим образом (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. Мне не хватает инструкции include в файле class_name_spec.rb? Или что-то не так с тем, как я это задал?

Заранее благодарен!

ответ

0

Я решил эту проблему.

Оказывается, что мне нужно изменить мой spec_helper быть следующим:

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

Это смутило меня, потому что у меня нет никаких других файлов в папке «повар/нож», но как это Оказывается, именно так рубин обращается к ножевой части шеф-повара. Если у кого-нибудь есть что добавить, это еще больше просветит меня, пожалуйста. Я до сих пор растерялся об этом

0

Вещи, чтобы проверить в решении вашей проблемы:

Убедитесь, что Chef камень находится в :test гем группы в вашем Gemfile (так, чтобы он загружался при запуске функции). Он должен быть в group :development, :test. Тогда ...

Изменить эту строку:

class ClassName < Chef::Knife 

к:

class ClassName < ::Chef::Knife 

Это говорит искать Chef в корневом пространстве имен, а не в ModuleName.

Смежные вопросы