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?