Skip to content
Skillpedia
Testing40k · #5262

pester-should-migration

Has your agent migrate Pester test syntax. It converts old commands to the new format, making test updates easier.

What it does

This tool helps update your code tests written in a language called Pester. It transforms the old way of writing tests (`Should -Be`) to the new way (`Should-Be`), making error messages clearer.

When to use it

  • ✓When you want to modernize your tests to the latest Pester version.
  • ✓When you need to convert old tests to the new format.
  • ✓When you want more detailed and precise error messages.

Example of what to ask your AI

“Convert `Should -Be` tests to `Should-Be` in my code.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/github/awesome-copilot/blob/main/skills/pester-should-migration/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/github/awesome-copilot/blob/main/skills/pester-should-migration/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool looks for old patterns like `Should -Be` or `Should -Not -Be` and replaces them with the new `Should-Be` or `Should-NotBe`. Some conversions require extra attention to ensure the test behavior remains the same.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add github/awesome-copilot --skill pester-should-migration

Or download just the file:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/pester-should-migration/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Pester Should -* → Should-* Migration

Convert classic Pester v5 assertions (Should -Be, space then parameter) to the new Pester v6 Should-* assertions (Should-Be, hyphen, no space).

Status: experimental / preview. Verified against Pester 6.0.0-rc2. The classic Should -Be style still works in v6, so migrate incrementally and keep the suite green.

Companion skill. This skill covers the optional move to the new Should-* operators. To upgrade a suite across major Pester versions (v3→v4→v5→v6 — the runtime, mocks, and config), use the separate pester-migration skill. In v6 the classic Should -Be keeps working, so adopting Should-* is independent of any version bump.

When to Use

  • Modernizing a Pester suite to the v6 Should-* assertions.
  • A user asks to migrate / convert / rewrite Should -... calls.
  • You want clearer, type-aware failure messages from the new assertions.

Know This First

  • Both syntaxes work side by side in Pester v6. Migration is optional and can be done one test (or one file) at a time. Nothing breaks if you leave some classic.
  • Requires Pester v6+. The Should-* commands do not exist in v5.
  • Negation is a separate command, not a -Not switch: Should -Not -Be → Should-NotBe. There is no -Not parameter on the new assertions.
  • The actual value still comes from the pipeline ($x | Should-Be 1) or from -Actual (Should-Be -Actual $x -Expected 1). -Because carries over unchanged.
  • Most renames are mechanical, but several have behavior changes you must check by hand — see Gotchas.

Procedure

Step 1 — Find the classic assertions

Search the target for the classic space-separated syntax (the tell is Should -, or Should followed by -Not):

Should -          # any classic operator
Should -Not -     # negated classic operator
Assert-MockCalled # also removed in v6 -> Should-Invoke

Limit the scope to PowerShell test files (*.Tests.ps1, *.ps1).

Step 2 — Apply the mapping

Most-used conversions (full list in references/assertion-map.md):

Classic (v5) New (v6)
$x | Should -Be 1 $x | Should-Be 1
$x | Should -Not -Be 1 $x | Should-NotBe 1
$x | Should -BeExactly 'A' $x | Should-BeString 'A' -CaseSensitive
$x | Should -BeGreaterOrEqual 2 $x | Should-BeGreaterThanOrEqual 2
$x | Should -BeLessOrEqual 2 $x | Should-BeLessThanOrEqual 2
$x | Should -BeLike 'a*' $x | Should-BeLikeString 'a*'
$x | Should -Match 're' $x | Should-MatchString 're'
$x | Should -BeOfType [int] $x | Should-HaveType ([int])
$x | Should -BeNullOrEmpty depends — see gotchas (no single equivalent)
$c | Should -HaveCount 3 $c | Should-BeCollection -Count 3
$c | Should -Contain 2 $c | Should-ContainCollection 2
{ ... } | Should -Throw 'msg' { ... } | Should-Throw -ExceptionMessage 'msg'
Should -Invoke Get-Thing Should-Invoke Get-Thing
Should -InvokeVerifiable Should-Invoke -Verifiable

Step 3 — Check the behavioral gotchas (do NOT skip)

These do not translate by a plain rename. Read each before converting:

  1. Case sensitivity. Classic Should -Be is case-insensitive on strings; so is Should-Be. But classic Should -BeExactly (case-sensitive) has no plain equivalent — use Should-BeString -CaseSensitive. (Should-Be is never case-sensitive.) Same pattern for BeLikeExactly → Should-BeLikeString -CaseSensitive and MatchExactly → Should-MatchString -CaseSensitive.
  2. Truthy vs. true. Classic Should -BeTrue / -BeFalse accept any truthy / falsy value (1, 'x', 0, '', $null, @()). The new Should-BeTrue / Should-BeFalse are strict (exactly $true / $false). To preserve the old loose behavior use Should-BeTruthy / Should-BeFalsy. Only use the strict ones when the value really is a boolean.
  3. BeNullOrEmpty has no single equivalent. Pick by intent: $null → Should-BeNull; empty string → Should-BeEmptyString; empty collection → Should-BeCollection -Count 0; broad "falsy" → Should-BeFalsy. The negation Should -Not -BeNullOrEmpty similarly splits into Should-NotBeNull / Should-NotBeEmptyString / Should-NotBeWhiteSpaceString.

…

FAQ

Do I need to update all my tests at once?

No, you can update one test or one file at a time. Pester still understands the old format in the new version, so there's no rush.

What happens if I don't update?

Nothing will break immediately. Old tests will continue to work in Pester version 6. Updating is optional to take advantage of new features.

Can some tests stop working after updating?

Yes, some conversions are more complex (like `Should -BeNullOrEmpty` or collection comparisons) and may require manual adjustments to ensure the test behaves as expected. It's important to check tests after conversion.

Details

Original description by the author

Experimental (preview) Pester skill for migrating classic Should -Be (v5) assertion syntax to the new Should-* (v6) assertions (note the hyphen, no space), e.g. `Should -Be` -> `Should-Be`, `Should -Not -Be` -> `Should-NotBe`. Tracks Pester 6, which is still a release candidate, so this guidance may change; verified against Pester 6.0.0-rc2. Use when converting Pester v5 assertions to Pester v6 Sh

repo: github/awesome-copilot

Popularity

GitHub stars
40k
Ranking position
#5262
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills