unit testing - Richtiger Start von RSpec-Marionet-Unit-Tests



unit-testing puppet (1)

Installieren Sie das PDK für Ihre Plattform von der Download-Seite . Erstelle das Modul erneut mit pdk new module pdk new class und der pdk new class oder pdk new class der Anleitung .

Jetzt komme ich zu dem wahrscheinlich unmittelbaren Problem in Ihrem Code: Ihr Code hängt von einem Puppet Forge Modul ab, puppetlabs/concat aber Sie haben es nicht zur Verfügung gestellt. In der PDK- puppetlabs_spec_helper bereits puppetlabs_spec_helper , um Fixtures für Ihr Modul zu laden.

Um puppetlabs_spec_helper zu sagen, um es für Sie zu bekommen, benötigen Sie eine Datei .fixtures.yml mit folgendem Inhalt:

fixtures:
  forge_modules:
    stdlib: puppetlabs/stdlib
    concat: puppetlabs/concat

Beachten Sie, dass Sie auch puppetlabs/stdlib benötigen, da dies eine Abhängigkeit von puppetlabs/concat .

Wenn Sie mehr Möglichkeiten für das puppetlabs_spec_helper von puppetlabs_spec_helper möchten, puppetlabs_spec_helper Sie bitte die puppetlabs_spec_helper von puppetlabs_spec_helper .

Wenn all dies vorhanden ist und die Code-Beispiele und Testinhalte, die Sie in die von der PDLK bereitgestellten anfänglichen Code-Skelette eingegeben haben, integriert sind, werden Ihre Tests jetzt alle bestanden, wenn Sie Folgendes ausführen:

$ pdk test unit

Beachten Sie, dass ich in einem Blogbeitrag alles über die zugrunde liegenden Technologien geschrieben habe, wie Rspec-puppet und mehr von Grund auf eingerichtet werden ( ref ), und es scheint immer noch die aktuellste Referenz zu diesem Thema zu sein.

Um mehr über rspec-puppet zu erfahren, lesen Sie bitte die offizielle rspec-puppet docs-Seite .

Ich habe eine einfache Puppet-4-Klasse und einen Komponententest erstellt, um sie wie folgt auszuführen (nach dem Ausführen von touch metadata.json; rspec-puppet-init in modules/test/ ):

# modules/test/manifests/hello_world1.pp
class test::hello_world1 {
  file { "/tmp/hello_world1":
    content => "Hello, world!\n"
  }
}

# modules/test/spec/classes/test__hello_world1_spec.rb
require 'spec_helper'
describe 'test::hello_world1' do
  it { is_expected.to compile }
  it { is_expected.to contain_file('/tmp/hello_world1')\
    .with_content(/^Hello, world!$/) }
end

Ich kann den rspec spec/classes/test__hello_world1_spec.rb erfolgreich ausführen, indem ich rspec spec/classes/test__hello_world1_spec.rb in modules/test/ ausführen.

Ich möchte nun zu einer etwas fortgeschritteneren Klasse übergehen, die Code aus einem anderen Modul verwendet, nämlich concat (das Modul wurde bereits in modules/concat installiert):

# modules/test/manifests/hello_world2.pp
class test::hello_world2
{
  concat{ "/tmp/hello_world2":
    ensure => present,
  }
  concat::fragment{ "/tmp/hello_world2_01":
    target  => "/tmp/hello_world2",
    content => "Hello, world!\n",
    order   => '01',
  }
}

# modules/test/spec/classes/test__hello_world2_spec.rb
require 'spec_helper'
describe 'test::hello_world2' do
  it { is_expected.to compile }
  # ...
end

Wenn ich versuche, diesen rspec spec/classes/test__hello_world2_spec.rb mit rspec spec/classes/test__hello_world2_spec.rb erhalte ich in modules/test eine Fehlermeldung, die rspec spec/classes/test__hello_world2_spec.rb enthält:

Fehler / Fehler: Fehler beim Kompilieren {is_expected.to compile}: Evaluierungsfehler: Fehler beim Evaluieren einer Ressourcenanweisung, Unbekannter Ressourcentyp: 'concat'

Ich vermute, die Ursache liegt darin, dass rspec das / die anderen Modul (e) nicht finden kann, da ihm kein "Modulpfad" mitgeteilt wurde.

Meine Frage ist: Wie genau soll ich Komponententests starten, insbesondere solche, die Zugriff auf andere Module benötigen?





rspec-puppet