Skip to content

Commit 2238989

Browse files
authored
Add tests for custom assertions (#2552)
* Add tests for custom assertions * Fix test for strict mode
1 parent 76be67d commit 2238989

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

tst/functions/Add-ShouldOperator.ts.ps1

+72
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,78 @@ i -PassThru:$PassThru {
7070
}
7171
}
7272

73+
b 'Executing custom Should assertions' {
74+
# Testing paramter and output syntax described in docs (https://pester.dev/docs/assertions/custom-assertions)
75+
Get-Module Pester | Remove-Module
76+
Import-Module "$PSScriptRoot\..\..\bin\Pester.psd1"
77+
78+
t 'Works for simple functions with expected output' {
79+
function CustomSimple ([string] $ActualValue, [switch] $Negate) {
80+
$succeeded = 'A' -eq $ActualValue
81+
if ($Negate) { $succeeded = -not $succeeded }
82+
83+
# Default failure message. Not used by Should unless succeeded is $false
84+
$failureMessage = "Expected 'A', but got '$ActualValue'."
85+
if (-not $succeeded -and $Negate) {
86+
$failureMessage = "Expected anything but 'A', but got '$ActualValue'."
87+
}
88+
89+
return [pscustomobject]@{
90+
Succeeded = $succeeded
91+
FailureMessage = $failureMessage
92+
}
93+
}
94+
95+
Add-ShouldOperator -Name CustomSimple -Test $function:CustomSimple
96+
'A' | Should -CustomSimple
97+
'B' | Should -CustomSimple -Not
98+
$e = { 'B' | Should -CustomSimple } | Verify-AssertionFailed
99+
$e.Exception.Message | Should -Be "Expected 'A', but got 'B'."
100+
}
101+
102+
t 'Works for advanced function with expected output' {
103+
function CustomAdvanced {
104+
[CmdletBinding()]
105+
# Requires all mandatory parameters below as $args is disabled by default in advanced functions
106+
param(
107+
[string] $ActualValue,
108+
[switch] $Negate,
109+
$CallerSessionState
110+
)
111+
$succeeded = 'A' -eq $ActualValue
112+
if ($Negate) { $succeeded = -not $succeeded }
113+
114+
# Default failure message. Not used by Should unless succeeded is $false
115+
$failureMessage = "Expected 'A', but got '$ActualValue'."
116+
if (-not $succeeded -and $Negate) {
117+
$failureMessage = "Expected anything but 'A', but got '$ActualValue'."
118+
}
119+
120+
return [pscustomobject]@{
121+
Succeeded = $succeeded
122+
FailureMessage = $failureMessage
123+
}
124+
}
125+
126+
Add-ShouldOperator -Name CustomAdvanced -Test $function:CustomAdvanced
127+
'A' | Should -CustomAdvanced
128+
'B' | Should -CustomAdvanced -Not
129+
$e = { 'B' | Should -CustomAdvanced } | Verify-AssertionFailed
130+
$e.Exception.Message | Should -Be "Expected 'A', but got 'B'."
131+
}
132+
133+
t 'Assertion exceptions are surfaced to user' {
134+
function CustomException ([string] $ActualValue, [switch] $Negate) {
135+
throw [System.InvalidOperationException]'something went wrong'
136+
}
137+
138+
Add-ShouldOperator -Name CustomException -Test $function:CustomException
139+
$e = { 'A' | Should -CustomException } | Verify-Throw
140+
$e.Exception | Verify-Type -Expected ([System.InvalidOperationException])
141+
$e.Exception.Message | Should -Be "something went wrong"
142+
}
143+
}
144+
73145
b 'HelpMessage for built-in Should operators' {
74146
Get-Module Pester | Remove-Module
75147
Import-Module "$PSScriptRoot\..\..\bin\Pester.psd1"

0 commit comments

Comments
 (0)