J'ai quelques tests Pester qui fonctionnent correctement dans la console, mais j'aimerais exécuter les tests automatiquement et envoyer un message si un test échoue. J'ai lu l'option -EnableExit oblige Invoke-Pester à renvoyer le nombre de tests ayant échoué. Mais chaque fois que j'utilise -EnableExit, la console PowerShell se ferme, peu importe si un test a échoué. Il s'agit de la version 4.7.3 de Pester. PSVersion 5.1.
Est-ce que Invoke-Pester -EnableExit est censé fermer le shell?
Comment obtenir le nombre de tests ayant échoué?
fonctionne bien:
Invoke-Pester -Script D: \ tmp \ PowerShell \ dummy1.Tests.ps1
ferme la fenêtre shell:
Invoke-Pester -Script D: \ tmp \ PowerShell \ dummy1.Tests.ps1 -EnableExit
Je m'attends à obtenir un entier en sortie, mais la fenêtre de la console se ferme.
3 Réponses :
Utilisez le paramètre de commutateur -PassThru de Invoke-Pester
$Result = Invoke-Pester -Script C:\temp\test.tests.ps1 -PassThru $Result $Result.FailedCount
Vous pouvez obtenir le nombre de tests ayant échoué en utilisant le commutateur -PassThru sur Invoke-Pester . Par exemple:
TagFilter :
ExcludeTagFilter :
TestNameFilter :
ScriptBlockFilter :
TotalCount : 230
PassedCount : 229
FailedCount : 1
SkippedCount : 0
PendingCount : 0
InconclusiveCount : 0
Time : 00:00:43.8675480
TestResult : {@{ErrorRecord=; ParameterizedSuiteName=; Describe=Testing all Modules against default
PSScriptAnalyzer rule-set; Parameters=System.Collections.Specialized.OrderedDictionary;
Passed=True; Show=All; FailureMessage=; Time=00:00:00.7463377; Name=passes the PSScriptAnalyzer
Rule PSAlignAssignmentStatement; Result=Passed; Context=Testing Module
'C:\Users\wragg\github\PowerShell-Subnet\Subnet\Subnet.psm1'; StackTrace=}, @{ErrorRecord=;
ParameterizedSuiteName=; Describe=Testing all Modules against default PSScriptAnalyzer rule-set;
Parameters=System.Collections.Specialized.OrderedDictionary; Passed=True; Show=All;
FailureMessage=; Time=00:00:02.2605400; Name=passes the PSScriptAnalyzer Rule
PSAvoidUsingCmdletAliases; Result=Passed; Context=Testing Module
'C:\Users\wragg\github\PowerShell-Subnet\Subnet\Subnet.psm1'; StackTrace=}, @{ErrorRecord=;
ParameterizedSuiteName=; Describe=Testing all Modules against default PSScriptAnalyzer rule-set;
Parameters=System.Collections.Specialized.OrderedDictionary; Passed=True; Show=All;
FailureMessage=; Time=00:00:00.0865224; Name=passes the PSScriptAnalyzer Rule
PSAvoidAssignmentToAutomaticVariable; Result=Passed; Context=Testing Module
'C:\Users\wragg\github\PowerShell-Subnet\Subnet\Subnet.psm1'; StackTrace=}, @{ErrorRecord=;
ParameterizedSuiteName=; Describe=Testing all Modules against default PSScriptAnalyzer rule-set;
Parameters=System.Collections.Specialized.OrderedDictionary; Passed=True; Show=All;
FailureMessage=; Time=00:00:00.0590095; Name=passes the PSScriptAnalyzer Rule
PSAvoidDefaultValueSwitchParameter; Result=Passed; Context=Testing Module
'C:\Users\wragg\github\PowerShell-Subnet\Subnet\Subnet.psm1'; StackTrace=}...}
Ma variable $ TestResults a alors une propriété FailedCount avec le nombre de tests qui ont échoué. Vous pouvez ensuite l'utiliser dans le cadre d'un pipeline pour que le pipeline échoue en cas d'échec des tests:
If ($TestResults.FailedCount -gt 0) { Throw "There were $($TestResults.FailedCount) failed tests" }
Voici un exemple des autres choses -PassThru code> renvoie:
$TestResults = Invoke-Pester -PassThru
Vous pouvez obtenir uniquement le nombre de tests ayant échoué en procédant comme suit:
(Invoke-Pester -Path D:\tmp\PowerShell\dummy1.Tests.ps1 -PassThru -Show None).FailedCount
Si vous voulez d'autres données (nombre réussi / ignoré, résultats de test, etc.), transmettez la sortie variable, puis traiter plus loin:
$ testResults = Invoke-Pester -Path D: \ tmp \ PowerShell \ dummy1.Tests.ps1 -PassThru -Show None
J'aime cette réponse, elle est concise.