Test PowerShell modules with Pester and PSScriptAnalyzer.
This GitHub Action is a part of the PSModule framework. It is recommended to use the Process-PSModule workflow to automate the whole process of managing the PowerShell module.
Test-PSModule enables:
- Test-Driven Development using Pester and PSScriptAnalyzer
The action runs the following the Pester test framework:
- PSScriptAnalyzer tests
- PSModule framework tests
- If
TestType
is set toModule
:- The module manifest is tested using Test-ModuleManifest.
- The module is imported.
- Custom module tests from the
tests
directory in the module repository are run. - CodeCoverage is calculated.
- If
TestType
is set toSourceCode
:- The source code is tested with:
PSScriptAnalyzer
for best practices, using custom settings.PSModule.SourceCode
for other PSModule standards.
- The source code is tested with:
- The action returns a
passed
output that istrue
if all tests pass, elsefalse
. - The following reports are calculated and uploaded as artifacts:
- Test suite results.
- Code coverage results.
The action fails if any of the tests fail or it fails to run the tests.
This is mitigated by the continue-on-error
option in the workflow.
To use the action, create a new file in the .github/workflows
directory of the module repository and add the following content.
Workflow suggestion - before module is built
name: Test-PSModule
on: [push]
jobs:
Test-PSModule:
name: Test-PSModule
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Initialize environment
uses: PSModule/Initialize-PSModule@main
- name: Test-PSModule
uses: PSModule/Test-PSModule@main
with:
Path: src
TestType: SourceCode
Workflow suggestion - after module is built
name: Test-PSModule
on: [push]
jobs:
Test-PSModule:
name: Test-PSModule
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Initialize environment
uses: PSModule/Initialize-PSModule@main
- name: Test-PSModule
uses: PSModule/Test-PSModule@main
with:
Path: outputs/modules
TestType: Module
Name | Description | Required | Default |
---|---|---|---|
Path |
The path to the code to test. | true |
|
TestType |
The type of tests to run. Can be either Module or SourceCode . |
true |
|
Name |
The name of the module to test. The name of the repository is used if not specified. | false |
|
TestsPath |
The path to the tests to run. | false |
tests |
StackTraceVerbosity |
Verbosity level of the stack trace. Allowed values: None , FirstLine , Filtered , Full . |
false |
None |
Verbosity |
Verbosity level of the test output. Allowed values: None , Normal , Detailed , Diagnostic . |
false |
Detailed |
Name | Description | Possible values |
---|---|---|
passed |
If the tests passed. | true , false |
The PSModule framework tests verifies the following coding practices that the framework enforces:
- Script filename and function/filter name should match.
- Pester | Docs | GitHub | PS Gallery
- PSScriptAnalyzer Docs | GitHub | PS Gallery
- PSResourceGet | Docs | GitHub | PS Gallery
- Test-ModuleManifest | Microsoft Learn
- PowerShellGet | Microsoft Learn