2017-05-22 4 views
1

Je fais des tests d'infrastructure dans Pester et il y a un scénario récurrent que je ne sais pas comment aborder. Par exemple, je veux vérifier si tous les rôles Web requis sont activés sur IIS. J'ai une collection de rôles Web requis et pour chacun d'eux, je veux affirmer qu'il est activé.Assertion sur chaque élément de la collection dans Pester

Mon code actuel ressemble à ceci:

$requiredRoles = @(
    "Web-Default-Doc", 
    "Web-Dir-Browsing", 
    "Web-Http-Errors", 
    "Web-Static-Content", 
    "Web-Http-Redirect" 
) 

Context "WebRoles" { 

    It "Has installed proper web roles" { 

     $requiredRoles | % { 
      $feature = Get-WindowsOptionalFeature -FeatureName $_ -online 
      $feature.State | Should Be "Enabled" 
     } 
    } 
} 

Il fonctionne dans le sens que le test échouera si l'un des rôles ne sont pas activés/installés. Mais cela est peu utile si la sortie de ce test Pester ressemble à ceci:

Context WebRoles 
[-] Has installed proper web roles 2.69s 
    Expected: {Enabled} 
    But was: {Disabled} 
    283:     $feature.State | Should Be "Enabled" 

Ce résultat ne donne aucune idée de ce qui est une fonctionnalité désactivée.

Y a-t-il une pratique recommandée dans ces scénarios? Je pensais à une manipulation de chaînes ...

Context "WebRoles" { 

    It "Has installed proper web roles" { 

     $requiredRoles | % { 
      $feature = Get-WindowsOptionalFeature -FeatureName $_ -online 
      $toCompare = "{0}_{1}" -f $feature.FeatureName,$feature.State 
      $toCompare | Should Be ("{0}_{1}" -f $_,"Enabled") 
     } 
    } 
} 

qui génèrerait:

Context WebRoles 
[-] Has installed proper web roles 2.39s 
    Expected string length 27 but was 28. Strings differ at index 20. 
    Expected: {IIS-DefaultDocument_Enabled} 
    But was: {IIS-DefaultDocument_Disabled} 
    -------------------------------^ 
    284:     $toCompare | Should Be ("{0}_{1}" -f $_,"Enabled") 

... ce qui est mieux, mais il ne se sent pas très bon ...

En outre, il y a un deuxième problème avec le fait que le test s'arrêtera au premier échec et que j'aurais besoin de relancer le test après avoir corrigé chaque caractéristique ...

Des idées?

Répondre

2

Mettez votre It dans la boucle comme ceci:

Context "WebRoles" { 
    $requiredRole | ForEach-Object { 
    It "Has installed web role $_" { 
     (Get-WindowsOptionalFeature -FeatureName $_ -online).State | Should Be "Enabled" 
    } 
    } 
} 
+0

Wow, je ne savais pas que je peux le faire! Cela résout à la fois mes problèmes - l'expressivité des résultats et arrêter au premier échec. Très agréable! Merci! – jumbo