unit-testing - intégration - test unitaire php



Manière correcte de lancer les tests unitaires RSpec-marionnette (1)

J'ai créé une classe Puppet 4 simple et un test unitaire pour l'accompagner comme suit (après l'exécution de touch metadata.json; rspec-puppet-init dans 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

Je peux exécuter le test unitaire en exécutant rspec spec/classes/test__hello_world1_spec.rb dans modules/test/ .

Je voudrais maintenant passer à une classe légèrement plus avancée qui utilise le code d'un autre module, à savoir concat (le module a déjà é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 unitaire avec rspec spec/classes/test__hello_world2_spec.rb alors que dans modules/test je reçois un message d'erreur qui inclut:

Echec / Erreur: Erreur {is_expected.to compile} lors de la compilation: Erreur d'évaluation: Erreur lors de l'évaluation d'une Resource Statement, Type de ressource inconnu: 'concat'

Je soupçonne que la cause première est que rspec ne peut pas trouver le ou les autres modules, car il n'a pas été dit de "modulepath".

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


Installez le PDK pour votre plate-forme à partir de sa page de téléchargement . pdk new module le module en utilisant le pdk new module pdk new class et la 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 de 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 aussi besoin de puppetlabs/stdlib , car c'est une dépendance de puppetlabs/concat .

Si vous voulez explorer plus de possibilités de montage, veuillez vous référer aux puppetlabs_spec_helper de puppetlabs_spec_helper .

Avec tout cela en place, et en intégrant les exemples de code et le contenu de test que vous avez publiés dans les squelettes de code initiaux fournis par le PDLK, vos tests passeront tous maintenant lorsque vous exécuterez:

$ pdk test unit

Notez que j'ai tout écrit 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, veuillez vous référer au site officiel de rspec-puppet docs .





rspec-puppet