Skip to main content
Version: v6

Should-HaveParameter

This page was generated

Contributions are welcome in Pester-repo.

SYNOPSIS

Asserts that a command has the expected parameter.

SYNTAX

Should-HaveParameter [[-ParameterName] <string>] [[-Type] <Object>] [[-DefaultValue] <string>]
[[-InParameterSet] <string>] [[-Alias] <string[]>] [[-Actual] <Object>] [[-Because] <string>]
[-Mandatory] [-HasArgumentCompleter]

DESCRIPTION

This assertion inspects command metadata and can also verify parameter details such as type, default value, aliases, parameter set membership, mandatory status, and argument completers.

EXAMPLES

EXAMPLE 1

Get-Command Invoke-WebRequest | Should-HaveParameter Uri -Type ([uri]) -Mandatory

This assertion passes, because Invoke-WebRequest has a mandatory -Uri parameter of type [uri].

EXAMPLE 2

function Get-Cat {
[CmdletBinding(DefaultParameterSetName = 'ByName')]
param(
[Parameter(ParameterSetName = 'ByName', Mandatory)]
[Alias('Id')]
[string] $Name,

[Parameter(ParameterSetName = 'ByIndex', Mandatory)]
[int] $Index,

[ValidateSet('Json', 'Xml')]
[string] $Format = 'Json'
)
}

Describe 'Get-Cat public contract' {
It 'requires a Name' {
Get-Command Get-Cat | Should-HaveParameter Name -Type ([string]) -Mandatory -Alias 'Id'
}

It 'defaults Format to Json' {
Get-Command Get-Cat | Should-HaveParameter Format -Type ([string]) -DefaultValue 'Json'
}
}

A typical real-life use is locking down the public API of your own command. These assertions pass, because -Name is a mandatory [string] with the alias Id, and -Format is an optional [string] that defaults to Json.

EXAMPLE 3

Get-Command Get-Cat | Should-HaveParameter Index -InParameterSet 'ByIndex'

This assertion passes, because the -Index parameter (from the Get-Cat function above) belongs to the ByIndex parameter set.

PARAMETERS

-Actual

The actual command to check. E.g. Get-Command "Invoke-WebRequest"

Type: System.Object
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 5
IsRequired: false
ValueFromPipeline: true
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Alias

The alias of the parameter to check.

Type: System.String[]
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 4
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Because

The reason why the input should be the expected value.

Type: System.String
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 6
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-DefaultValue

The default value of the parameter to check. E.g. "https://example.com"

Type: System.String
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 2
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-HasArgumentCompleter

Whether the parameter has an argument completer or not.

Type: System.Management.Automation.SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-InParameterSet

The parameter set that the parameter belongs to.

Type: System.String
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 3
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Mandatory

Whether the parameter is mandatory or not.

Type: System.Management.Automation.SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-ParameterName

The name of the parameter to check. E.g. Uri

Type: System.String
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 0
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Type

The type of the parameter to check. E.g. [string]

Type: System.Object
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 1
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters.

INPUTS

System.Object

OUTPUTS

NOTES

The attribute [ArgumentCompleter] was added with PSv5. Previously this assertion will not be able to use the -HasArgumentCompleter parameter if the attribute does not exist.

Use the -ErrorAction parameter to control soft-assertion behavior for this assertion. -ErrorAction Continue records the failure and lets the rest of the test run (a soft assertion), while -ErrorAction Stop fails the test immediately, for example to guard a precondition before continuing.

When -ErrorAction is not specified, the behavior comes from Should.ErrorAction in the configuration, which defaults to Stop. See https://pester.dev/docs/assertions/soft-assertions for more about soft assertions.

VERSION

This page was generated using comment-based help in Pester 6.0.0.