Назначение динамического значения в rspec-puppet

Есть ли возможность динамически присваивать значения параметрам в rspec-puppet?

Ниже приведен пример моего тестового примера rspec-puppet. Прямо сейчас я жестко закодировал все детали полного доменного имени и имени хоста.

Можно ли присвоить эти значения динамически?

let :facts do
  {
   :fqdn      => 'puppet.example.com',
   :hostname  => 'puppet',
   :ipaddress => 'xxx.yy.ee.zzz'
 }
end

it do
  should contain_host('puppet.example.com').with(
    'ensure'       => 'present',
    'host_aliases' => 'puppet',
    'ip'           => 'xxx.yy.ee.zzz'
    )
end

person Puppeteer    schedule 01.07.2015    source источник
comment
С какой целью конкретно? Модульные тесты обычно полагаются на жестко запрограммированные входные значения для проверки ожидаемых результатов.   -  person Felix Frank    schedule 01.07.2015


Ответы (1)


Да, поскольку rspec сам по себе является рубиновым кодом, вы можете сделать что-то вроде этого:

['1.1.1.1','2.2.2.2'].each do | ip_address |

  context "with an IP Address of #{ip_address}" do
    let :facts do
      {
        :fqdn      => 'puppet.example.com',
        :hostname  => 'puppet',
        :ipaddress => ip_address,
      }
    end

    it do
      is_expected.to contain_host('puppet.example.com').with(
        'ensure'       => 'present',
        'host_aliases' => 'puppet',
        'ip'           => ip_address,
        )
    end
  end
end

Вы также можете сделать что-то подобное с shared_examples и shared_contexts:

shared_examples :compile, :compile => true do
  it { should compile.with_all_deps }
end

shared_context 'redhat_facts' do |operatingsystem, operatingsystemrelease|
  let(:facts) { super().merge({
      :osfamily => "RedHat",
      :operatingsystem => operatingsystem,
      :operatingsystemrelease => operatingsystemrelease
  }) }
end
person Peter Souter    schedule 07.07.2015