2017-08-21 1 views
2

J'ai créé simple marionnette 4 classe et un test unitaire pour aller avec elle comme suit (après l'exécution touch metadata.json; rspec-puppet-init tout en modules/test/):correcte façon de commencer l'unité RSpec-marionnette teste

# 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 

Je peux avec succès exécutez le test unitaire en exécutant rspec spec/classes/test__hello_world1_spec.rb tandis que dans modules/test/.

Je voudrais maintenant passer à un peu plus classe avancée qui utilise le code d'un autre module, à savoir concat (le module a arleady été installé dans modules/concat):

# 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 

Lorsque je tente d'exécuter ce test d'unité avec rspec spec/classes/test__hello_world2_spec.rb tout en modules/test je reçois un message d'erreur qui comprend:

Failure/Error: it { is_expected.to compile } error during compilation: Evaluation Error: Error while evaluating a Resource Statement, Unknown resource type: 'concat'

Je soupçonne que la cause fondamentale est que rspec ne peut pas trouver l'autre module (s) , parce qu'il n'a pas été dit un "chemin de module".

Ma question est la suivante: comment dois-je exactement démarrer les tests unitaires, en particulier ceux qui nécessitent l'accès à d'autres modules?

Répondre

3

Installez le PDK pour votre plate-forme à partir de download page. Recréez le module en utilisant pdk new module et pdk new class, ou en suivant le Guide. Maintenant, je viens à ce qui est probablement le problème immédiat dans votre code: votre code dépend d'un module Puppet Forge, puppetlabs/concat mais vous ne l'avez pas rendu disponible. Le modèle de module PDK a déjà pré-configuré puppetlabs_spec_helper pour charger les appareils pour votre module.

Pour dire puppetlabs_spec_helper de l'obtenir pour vous, vous avez besoin d'un fichier .fixtures.yml avec le contenu suivant:

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

Notez que vous avez également besoin puppetlabs/stdlib, parce que c'est une dépendance de puppetlabs/concat.

Si vous souhaitez explorer d'autres possibilités de fixation, veuillez vous reporter au puppetlabs_spec_helper's docs.

Avec tout cela en place, et l'intégration des exemples de code et contenu tests que vous avez publié dans les squelettes de code initial fourni par le PDLK, vos tests passent tous maintenant lorsque vous exécutez:

$ pdk test unit 

Notez que J'ai écrit tout sur les technologies sous-jacentes, dans un billet de blog, montrant comment configurer RSPec-marionnette et plus à partir de zéro (ref), et il semble toujours être la référence la plus à jour sur ce sujet.

Pour en savoir plus sur rppec-marionnette en général, s'il vous plaît se référer à la rspec-puppet docs site officielle.