2017-05-22 1 views
1

Pester에서 일부 인프라 테스팅을하고 있으며 접근 방법을 모르는 반복 시나리오가 있습니다.Pester에서 컬렉션의 각 항목에 대한 어설 션

IIS에서 필요한 모든 웹 역할을 사용할 수 있는지 확인하고 싶습니다. 필요한 웹 역할 모음이 있고 각 웹 역할을 사용할 수 있다고 주장하고 싶습니다.

나의 현재 코드는 다음과 같습니다

$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" 
     } 
    } 
} 

그것은 역할의 설치/사용할 수없는 경우 테스트가 실패한다는 의미에서 작동합니다. 그러나 이러한 훼방 테스트의 출력은 다음과 같습니다 경우 거의 유용

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

이 결과는 장애인입니다 기능이있는 대한 단서를 제공하지 않습니다.

이러한 시나리오에 권장되는 방법이 있습니까? 나는 ... 일부 문자열 조작에 대해 생각했다

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") 
     } 
    } 
} 

하는 것 출력 : 더 나은이지만, 매우 기분이 좋지 않습니다

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") 

...

또한, 테스트가 첫 번째 실패에서 멈추고 각 기능을 수정 한 후에 테스트를 다시 실행해야한다는 사실에 두 번째 문제가 있습니다 ...

아이디어가 있으십니까?

답변

2

은과 같이 루프 내부에 It을 넣어 :

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

와우, 나는 그렇게 할 수 몰랐어요! 그게 내 문제 모두를 해결합니다 - 결과 표현력과 첫 번째 실패에 대한 중단. 아주 좋아! 감사! – jumbo