2
votes

Comment puis-je obtenir le nombre de tests ayant échoué d'Invoke-Pester?

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.


0 commentaires

3 Réponses :


1
votes

Utilisez le paramètre de commutateur -PassThru de Invoke-Pester

$Result = Invoke-Pester -Script C:\temp\test.tests.ps1 -PassThru
$Result
$Result.FailedCount


0 commentaires

2
votes

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


0 commentaires

0
votes

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


1 commentaires

J'aime cette réponse, elle est concise.