Author Posts

April 7, 2017 at 7:30 pm

Hi Everyone!

I have a Pester test setup to test out one function within a .psm1 file. The function is very simple and pretty much adds to an existing cmdlet so that the PS code is more clean.

function Get-Datetime {
    Get-Date -Format "MM.dd.yyyy:hh.mm.ss"
}

function Add-RabbitMQContent {
    param
    (
    [string] $Path = "C:\predefinedlocation",
    [Parameter(Mandatory=$true)] [string] $Value
    )

    Add-Content -Path $Path -Value "$(Get-DateTime) $Value"
}

#Example of when I am using the function. I like that I do not have to specify the location, but I can if I choose to and the #value will also write out the date time next to it like a log file. 
Add-RabbitMQContent -Value "Exiting program!"

My Pester Test fails at using the "Add-RabbitMQContent" function noted in code below. If I attempt to pass a local directory or use the $TestDrive\ location it does not work. Any thoughts on why?

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
. "$here\$sut"

Import-Module "C:\LocationtoModule\RabbitMQ-PartitionCheck.psm1"
Describe "RabbitMQ-PartitionCheck Module" {
    InModuleScope -ModuleName RabbitMQ-PartitionCheck {
        Context "Checking Get-DateTime Function" {
            $DateTime = Get-DateTime
            It "Verifying Get-Date Output Format MM.dd.yyyy:hh.mm.ss" {
                $DateTime | Should Match "\d\d\.\d\d\.\d\d\d\d\:\d\d\.\d\d\.\d\d"
            }
            It "Get-Date should Not be NULL" {
                $DateTime | Should Not Be $NULL
            }
        }
        Context "Checking Add-RabbitMQContent Function" {
            It 'TestDrive should exist' {
                $TestDrive | Should Exist
            }
     ###################### Fails at below test ######################################       
            It 'Adding Test.txt to TestDrive' {
                Setup -File "test.txt"
                $TestPath = "$TestDrive\test.txt"
                Add-RabbitMQContent -Path "$TestPath" -Value "Hi"
                $result = Get-Content $TestPath
                $result | Should be "Hi"
            }
        }
    }
}

April 7, 2017 at 9:15 pm

What is the Setup function inside of your test? Also, the reason it's failing is because you're writing

"$(Get-DateTime) $Value"

to the file but your test is only checking for

$Value

. Your test should look something like this:

$now =  Get-Date -Format 'MM.dd.yyyy:hh.mm.ss'
It 'Adding Test.txt to TestDrive' {
    $TestPath = "$TestDrive\test.txt"
    Add-RabbitMQContent -Path $TestPath -Value "Hi"
    $result = Get-Content $TestPath
    $result | Should belike "$now* Hi"
}

It's going to be hard to test to ensure the time was inserted correctly though since it may not be the same second.

April 7, 2017 at 10:07 pm

Adam,

The Setup is not a self-made function. It is a cmdlet to add files to your TestDrive. So I cannot paste URL link in this post but here is code you can find in the Pester project on Github using "Setup."

1 Set-StrictMode -Version Latest 
2 
 
3 InModuleScope Pester { 
4     Describe "PesterContain" { 
5         Context "when testing file contents" { 
############ Below is the Setup being used.  ############################
6             Setup -File "test.txt" "this is line 1`nrush is awesome`nAnd this is Unicode: " 
7 
 
8             It "returns true if the file contains the specified content" { 
9                 "$TestDrive\test.txt" | Should Contain rush 
10                 "$TestDrive\test.txt" | Should -Contain rush 
11             } 
12 
 
13             It "returns true if the file contains the specified content with different case" { 
14                 "$TestDrive\test.txt" | Should Contain RUSH 
15                 "$TestDrive\test.txt" | Should -Contain RUSH 
16             } 
17 
 
18             It "returns false if the file does not contain the specified content" { 
19                 "$TestDrive\test.txt" | Should Not Contain slime 
20                 "$TestDrive\test.txt" | Should -Not -Contain slime 
21             } 
22 
 
23             It "returns true if the file contains the specified UTF8 content" { 
24                 "$TestDrive\test.txt" | Should Contain "" 
25                 "$TestDrive\test.txt" | Should -Contain "" 
26             } 
27         } 
28     } 
29 }

OMG! Such a simple solution. I have been looking at my Pester testing all day. I should have walked away for a bit. I did not catch that. Thank you, Adam. I just this to my test and it worked successfully.

Thank you,
-Michael

April 7, 2017 at 10:54 pm

It happens to the best of us. :). I was not aware of that setup command. I've just always created the file with Add-Content. Learn something new every day.