@@ -70,6 +70,78 @@ i -PassThru:$PassThru {
70
70
}
71
71
}
72
72
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
+
73
145
b ' HelpMessage for built-in Should operators' {
74
146
Get-Module Pester | Remove-Module
75
147
Import-Module " $PSScriptRoot \..\..\bin\Pester.psd1"
0 commit comments