2015-12-11 11 views
0
  • Использование кукол 3
  • Тестирование с помощью RSpec-марионетку
  • Итерация над массивом хэшей с использованием определенного типа
  • Получение ошибки, говоря мне, что мой параметр (который по умолчанию до значения $ заголовка) не могут быть доступны, как я, потому что это не является массивом или Hash

Я использую старый стиль итерации в кукольном модуль, создавая определенный тип перебрать массив хешей. Я пытаюсь написать тест для этого определения в rspec-puppet, пытаясь назначить хэш для :title, используя let(). Предполагается, что значение $title будет установлено на мою переменную под названием $daemon, но мои тесты продолжают метать ошибки, говоря, что $daemon не является хешем или массивом.Rspec Кукольный: Defined Type итерация

Вот как я создаю мой определенный тип:

define my_module::daemon_install ($daemon = $title) { 

    package {"${daemon['package_name']}": 
    ensure => "${daemon['package_version']}", 
    } 

    file {"${some_fact}/${daemon['binary']}.conf": 
    ensure => file, 
    content => "blah" 
    notify => Service["${daemon['name']}"], 
    } 

    service {"${daemon['name']}": 
    ensure => running, 
    enable => true, 
    } 
} 

И вот как я пытаюсь установить заголовок:

describe 'my_module::daemon_install' do 

    context 'with foo' do 

    let(:title) { 
     { 
     "name" => "foo", 
     "package_name" => "bar", 
     "package_version" => "1.0.1", 
     "binary" => "food", 
     } 
    } 

    # ... 

    end 
end 

А вот ошибка:

daemon is not a hash or array when accessing it with package_version

Я на самом деле не умею использовать определенные типы для итерации, и очень новый t rspec-puppet, так что я не уверен, что я пропустил что-то очевидное здесь или нет.

Зачем стоит опасаться package_version, а не package_name? И что еще более важно: почему это не хэш, когда (я полагаю) я правильно устанавливаю его в хэш в файле spec.

Следует отметить, что еще один тест класса, который использует этот определенный тип, завершается успешно. Поэтому, похоже, это связано с тем, как я пытаюсь установить заголовок при прямом тестировании определения, если бы я угадал.

ответ

1

Rspec всегда преобразует title в String.

Использование $name в define() вместо $title и добавить следующее в тестах:

let :title do 
    { ... } 
end 

let :params do 
    { :name => title } 
end 

Обратите внимание $name должно быть равным $title.