-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathappveyor.pester.ps1
79 lines (64 loc) · 2.74 KB
/
appveyor.pester.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# This script will invoke pester tests
# It should invoke on PowerShell v2 and later
# We serialize XML results and pull them in appveyor.yml
#If Finalize is specified, we collect XML output, upload tests, and indicate build errors
param(
[switch]$Finalize,
[switch]$Test,
[string]$ProjectRoot = $ENV:APPVEYOR_BUILD_FOLDER
)
#Initialize some variables, move to the project root
$Timestamp = Get-date -uformat "%Y%m%d-%H%M%S"
$PSVersion = $PSVersionTable.PSVersion.Major
$TestFile = "TestResults_PS$PSVersion`_$TimeStamp.xml"
$Address = "https://ci.appveyor.com/api/testresults/nunit/$($env:APPVEYOR_JOB_ID)"
Set-Location $ProjectRoot
$Verbose = @{}
if($env:APPVEYOR_REPO_BRANCH -and $env:APPVEYOR_REPO_BRANCH -notlike "master")
{
$Verbose.add("Verbose",$True)
}
#Run a test with the current version of PowerShell, upload results
if($Test)
{
"`n`tSTATUS: Testing with PowerShell $PSVersion`n"
Import-Module Pester -force
Invoke-Pester @Verbose -Path "$ProjectRoot\Tests" -OutputFormat NUnitXml -OutputFile "$ProjectRoot\$TestFile" -PassThru |
Export-Clixml -Path "$ProjectRoot\PesterResults_PS$PSVersion`_$Timestamp.xml"
If($env:APPVEYOR_JOB_ID)
{
(New-Object 'System.Net.WebClient').UploadFile( $Address, "$ProjectRoot\$TestFile" )
}
}
#If finalize is specified, display errors and fail build if we ran into any
If($Finalize)
{
#Show status...
$AllFiles = Get-ChildItem -Path $ProjectRoot\PesterResults*.xml | Select -ExpandProperty FullName
"`n`tSTATUS: Finalizing results`n"
"COLLATING FILES:`n$($AllFiles | Out-String)"
#What failed?
$Results = @( Get-ChildItem -Path "$ProjectRoot\PesterResults_PS*.xml" | Import-Clixml )
$FailedCount = $Results |
Select -ExpandProperty FailedCount |
Measure-Object -Sum |
Select -ExpandProperty Sum
if ($FailedCount -gt 0) {
$FailedItems = $Results |
Select -ExpandProperty TestResult |
Where {$_.Passed -notlike $True}
"FAILED TESTS SUMMARY:`n"
$FailedItems | ForEach-Object {
$Item = $_
[pscustomobject]@{
Describe = $Item.Describe
Context = $Item.Context
Name = "It $($Item.Name)"
Result = $Item.Result
}
} |
Sort Describe, Context, Name, Result |
Format-List
throw "$FailedCount tests failed."
}
}