Bird
Raised Fist0
PowerShellscripting~10 mins

Pester testing framework basics in PowerShell - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a Pester test block.

PowerShell
Describe 'MyFunction' { It 'should return true' { [1] } }
Drag options to blanks, or click blank then click option'
AMyFunction | Should -Be $true
BMyFunction -eq $true
CAssert-True MyFunction
DTest-MyFunction -IsTrue
Attempts:
3 left
💡 Hint
Common Mistakes
Using comparison operators like -eq directly without Should.
Trying to call non-existent commands like Assert-True.
2fill in blank
medium

Complete the code to run all Pester tests in the current directory.

PowerShell
Invoke-Pester -[1] .
Drag options to blanks, or click blank then click option'
AScript
BFile
CTest
DPath
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect parameter names like -File or -Script.
Not specifying any path and expecting tests to run automatically.
3fill in blank
hard

Fix the error in the test assertion to check if a value equals 5.

PowerShell
$result = 5; $result | Should [1] 5
Drag options to blanks, or click blank then click option'
A-Be
B-BeGreaterThan
C-EqualTo
D-Equals
Attempts:
3 left
💡 Hint
Common Mistakes
Using operators like -EqualTo or -Equals which are not valid in Pester.
Using comparison operators like -eq instead of Should -Be.
4fill in blank
hard

Fill both blanks to create a test that checks if a string contains 'hello'.

PowerShell
Describe 'String tests' { It 'contains hello' { 'hello world' | Should [1] [2] } }
Drag options to blanks, or click blank then click option'
A-Match
B-Contain
C'hello'
D'world'
Attempts:
3 left
💡 Hint
Common Mistakes
Using -Contain which is for collections, not strings.
Using the wrong substring or pattern.
5fill in blank
hard

Fill all three blanks to create a test that checks if a list has exactly 3 items.

PowerShell
Describe 'List tests' { It 'has 3 items' { $list = @(1,2,3); $list.[1] | Should [2] [3] } }
Drag options to blanks, or click blank then click option'
ACount
B-Be
C3
DLength
Attempts:
3 left
💡 Hint
Common Mistakes
Using Length instead of Count in PowerShell arrays.
Using wrong assertion operators or values.

Practice

(1/5)
1. What is the main purpose of the Describe block in a Pester test script?
easy
A. To check if a value matches an expectation
B. To run the tests automatically
C. To define variables for the tests
D. To group related tests together

Solution

  1. Step 1: Understand the role of Describe block

    The Describe block is used to group related tests in Pester, making the test script organized and readable.
  2. Step 2: Differentiate from other blocks

    It blocks contain individual tests, and Should is used for assertions, not grouping.
  3. Final Answer:

    To group related tests together -> Option D
  4. Quick Check:

    Describe groups tests = C [OK]
Hint: Describe groups tests; It contains tests; Should checks results [OK]
Common Mistakes:
  • Confusing Describe with It blocks
  • Thinking Should groups tests
  • Assuming Describe runs tests automatically
2. Which of the following is the correct syntax to write a simple test in Pester that checks if the number 5 is greater than 3?
easy
A. Test 'Test' { Check 'checks number' { 5 > 3 ShouldBe True } }
B. Describe 'Test' { It 'checks number' { Should 5 -gt 3 } }
C. Describe 'Test' { It 'checks number' { 5 -gt 3 | Should Be $true } }
D. It 'checks number' { 5 -gt 3 ShouldBe $true }

Solution

  1. Step 1: Identify correct Pester syntax

    The correct syntax uses Describe to group, It for the test, and pipes the condition to Should Be $true.
  2. Step 2: Check each option

    Describe 'Test' { It 'checks number' { 5 -gt 3 | Should Be $true } } correctly uses Describe, It, and pipes the boolean expression to Should Be $true. Others have syntax errors or wrong keywords.
  3. Final Answer:

    Describe 'Test' { It 'checks number' { 5 -gt 3 | Should Be $true } } -> Option C
  4. Quick Check:

    Correct syntax uses Describe, It, and Should Be [OK]
Hint: Use Describe and It blocks; pipe condition to Should Be [OK]
Common Mistakes:
  • Using wrong keywords like Test or Check
  • Missing pipe before Should
  • Incorrect comparison operators
3. What will be the output when running this Pester test script?
Describe 'Math Tests' {
  It 'checks addition' {
    (2 + 2) | Should Be 4
  }
  It 'checks subtraction' {
    (5 - 3) | Should Be 1
  }
}
medium
A. One test fails because 5 - 3 is not 1
B. Both tests pass successfully
C. Syntax error due to missing parentheses
D. All tests fail because Should Be is used incorrectly

Solution

  1. Step 1: Evaluate each test condition

    The first test checks if 2 + 2 equals 4, which is true. The second test checks if 5 - 3 equals 1, which is false because 5 - 3 equals 2.
  2. Step 2: Determine test results

    Since the second test condition is false, that test fails. The first test passes.
  3. Final Answer:

    One test fails because 5 - 3 is not 1 -> Option A
  4. Quick Check:

    5 - 3 = 2, not 1, so test fails [OK]
Hint: Calculate expressions carefully; check expected values [OK]
Common Mistakes:
  • Assuming 5 - 3 equals 1
  • Ignoring test failure details
  • Thinking Should Be causes syntax errors here
4. You wrote this Pester test but it fails to run:
Describe 'Test' {
  It 'checks value' {
    $result = Get-Value
    $result | Should Be 10
  }
}
What is the most likely reason for the failure?
medium
A. Get-Value is not a recognized command or function
B. Should Be cannot be used with variables
C. It block must not contain variable assignments
D. Describe block requires a parameter

Solution

  1. Step 1: Analyze the test script

    The test calls Get-Value but this command is not standard in PowerShell and likely undefined.
  2. Step 2: Identify cause of failure

    Since Get-Value is missing, the script fails before reaching the assertion. Other options are incorrect because variables and Describe blocks are valid as used.
  3. Final Answer:

    Get-Value is not a recognized command or function -> Option A
  4. Quick Check:

    Undefined commands cause test failures [OK]
Hint: Check if all commands/functions exist before testing [OK]
Common Mistakes:
  • Assuming Should Be can't use variables
  • Thinking Describe needs parameters
  • Believing variable assignment is disallowed in It
5. You want to write a Pester test that checks if a function Get-UserName returns a non-empty string. Which test script correctly achieves this?
hard
A. Describe 'User Tests' { It 'returns non-empty string' { Get-UserName | Should BeNotNullOrEmpty } }
B. Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Not BeNullOrEmpty } }
C. Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Be $true } }
D. Describe 'User Tests' { It 'returns non-empty string' { Get-UserName | Should Not BeNullOrEmptyString } }

Solution

  1. Step 1: Identify correct assertion for non-empty string

    Pester provides Should Not BeNullOrEmpty to check that a value is not null or empty.
  2. Step 2: Check syntax correctness

    Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Not BeNullOrEmpty } } correctly calls Get-UserName in parentheses and pipes the result to Should Not BeNullOrEmpty. Other options use incorrect assertion names or syntax.
  3. Final Answer:

    Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Not BeNullOrEmpty } } -> Option B
  4. Quick Check:

    Use Should Not BeNullOrEmpty for non-empty string checks [OK]
Hint: Use Should Not BeNullOrEmpty to check non-empty strings [OK]
Common Mistakes:
  • Using incorrect assertion names like BeNotNullOrEmpty
  • Forgetting parentheses around function call
  • Using Should Be $true for string checks