$LoadedResources = Get-DscResource





Describe “DSCResources located in $PSScriptRoot \DSCResources" {

$ResourceList = Get-ChildItem " $PSScriptRoot \DSCResources"

Foreach ( $Resource in $ResourceList ){ ){

It " $Resource Is Loaded [Dynamic]" {

$LoadedResources |

Where-Object { $_ . name -eq $Resource } | name

Should Not BeNullOrEmpty





Can my resource generate a mof file?

The next thing I want to know is if it will generate a mof file. I create a test like this for every DSC resource. I use the TestDrive: location to manage temporary files.





Describe "Firewall" {

It "Creates a mof file" {

configuration DSCTest {

Import-DscResource -modulename MyModule

Node Localhost {

Firewall SampleConfig {

State = "ON"

DSCTest -OutputPath Testdrive:\dsc

"TestDrive:\dsc\localhost.mof" | Should Exist





Do my Test and Get functions work?

For some of my resources, I even test the Get and Test functions inside the module. I first have to rename the script so I can load it. Also notice I use a Mock function to keep the Export-Module from throwing errors.









$here = Split-Path -Parent $MyInvocation . MyCommand . Path MyCommandPath





Describe "Firewall" {

Copy-Item " $here \Firewall.psm1" TestDrive:\script.ps1

Mock Export-ModuleMember { return $true }





. "TestDrive:\script.ps1"

It "Test-TargetResource returns true or false" {

Test-TargetResource -state "ON" |

Should Not BeNullOrEmpty





It "Get-TargetResource returns State = on or off" {

Get-TargetResource -state "ON" ) . state | state

Should Match "on|off"





Edit: I added a part 2

The more I use Pester, the more I like it. I found some ways to leverage it in validating my use of DSC Resources and configurations. Here are some samples to give you an idea of what I am talking about.Often I will create a new resource thinking it will work only to not have it loaded for some reason. At the moment all my resources are in the same module. So I have this test to use my folder structure to test for a loaded resource.