Tests PowerShell module repos using PSModule framework rules.
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 via Invoke-Pester.
- The action runs test on the module repository based on
Settings
:SourceCode
- Tests source code style and standards based on PSModule framework rules.Module
- Tests the module build module style and standards based on PSModule framework rules.- The module is imported in its own context to avoid conflicts with other modules.
- The action returns the test results as action outputs.
- The following reports are calculated and uploaded as artifacts. This is done to support the action being run in matrix jobs.
- Test suite results. In Process-PSModule this is evaluated in a later job by Get-PesterTestResults
- Code coverage results. In Process-PSModule this is evaluated in a later job by Get-PesterCodeCoverage
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.
It is recommended to use the Process-PSModule workflow to automate the whole process of managing the PowerShell module.
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:
Settings: 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:
Settings: Module
Name | Description | Required | Default |
---|---|---|---|
Name |
The name of the module to test. The name of the repository is used if not specified. | false |
|
Settings |
The type of tests to run. Can be either Module or SourceCode . |
true |
|
Debug |
Enable debug output. | false |
'false' |
Verbose |
Enable verbose output. | false |
'false' |
Version |
Specifies the version of the GitHub module to be installed. The value must be an exact version. | false |
|
Prerelease |
Allow prerelease versions if available. | false |
'false' |
WorkingDirectory |
The working directory to use for the action. This is the root folder where tests and outputs are expected. | false |
'.' |
StepSummary_Mode |
Controls which tests to show in the GitHub step summary. Allows "Full" (all tests), "Failed" (only failed tests), or "None" (disable step summary). | false |
Failed |
StepSummary_ShowTestOverview |
Controls whether to show the test overview table in the GitHub step summary. | false |
false |
StepSummary_ShowConfiguration |
Controls whether to show the configuration details in the GitHub step summary. | false |
false |
Run_ExcludePath |
Directories/files to exclude from the run. | false |
|
Run_ScriptBlock |
ScriptBlocks containing tests to be executed. | false |
|
Run_Container |
ContainerInfo objects containing tests to be executed. | false |
|
Run_TestExtension |
Filter used to identify test files (e.g. .Tests.ps1 ). |
false |
|
Run_Exit |
Whether to exit with a non-zero exit code on failure. | false |
|
Run_Throw |
Whether to throw an exception on test failure. | false |
|
Run_SkipRun |
Discovery only, skip actual test run. | false |
|
Run_SkipRemainingOnFailure |
Skips remaining tests after the first failure. Options: None , Run , Container , Block . |
false |
|
Filter_Tag |
Tags of Describe/Context/It blocks to run. | false |
|
Filter_ExcludeTag |
Tags of Describe/Context/It blocks to exclude. | false |
|
Filter_Line |
Filter by file + scriptblock start line (e.g. C:\tests\file1.Tests.ps1:37 ). |
false |
|
Filter_ExcludeLine |
Exclude by file + scriptblock start line. Precedence over Filter_Line . |
false |
|
Filter_FullName |
Full name of a test with wildcards, joined by dot. E.g. *.describe Get-Item.test1 |
false |
|
CodeCoverage_Enabled |
Enable code coverage. | false |
|
CodeCoverage_OutputFormat |
Format for the coverage report. Possible values: JaCoCo , CoverageGutters , Cobertura . |
false |
|
CodeCoverage_OutputPath |
Where to save the code coverage report (relative to the current dir). | false |
|
CodeCoverage_OutputEncoding |
Encoding of the coverage file. | false |
|
CodeCoverage_Path |
Files/directories to measure coverage on (by default, reuses Path from the general settings). |
false |
|
CodeCoverage_ExcludeTests |
Exclude tests themselves from coverage. | false |
|
CodeCoverage_RecursePaths |
Recurse through coverage directories. | false |
|
CodeCoverage_CoveragePercentTarget |
Desired minimum coverage percentage. | false |
|
CodeCoverage_UseBreakpoints |
Experimental: When false , use a Profiler-based tracer instead of breakpoints. |
false |
|
CodeCoverage_SingleHitBreakpoints |
Remove breakpoints after first hit. | false |
|
TestResult_Enabled |
Enable test-result output (e.g. NUnitXml, JUnitXml). | false |
|
TestResult_OutputFormat |
Possible values: NUnitXml , NUnit2.5 , NUnit3 , JUnitXml . |
false |
|
TestResult_OutputPath |
Where to save the test-result report (relative path). | false |
|
TestResult_OutputEncoding |
Encoding of the test-result file. | false |
|
Should_ErrorAction |
Controls if Should throws on error. Use Stop to throw, or Continue to fail at the end. |
false |
|
Debug_ShowFullErrors |
Show Pester internal stack on errors. (Deprecated – overrides Output.StackTraceVerbosity to Full ). |
false |
|
Debug_WriteDebugMessages |
Write debug messages to screen. | false |
|
Debug_WriteDebugMessagesFrom |
Filter debug messages by source. Wildcards allowed. | false |
|
Debug_ShowNavigationMarkers |
Write paths after every block/test for easy navigation in Visual Studio Code. | false |
|
Debug_ReturnRawResultObject |
Returns an unfiltered result object, for development only. | false |
|
Output_Verbosity |
Verbosity: None , Normal , Detailed , Diagnostic . |
false |
|
Output_StackTraceVerbosity |
Stacktrace detail: None , FirstLine , Filtered , Full . |
false |
|
Output_CIFormat |
CI format of error output: None , Auto , AzureDevops , GithubActions . |
false |
|
Output_CILogLevel |
CI log level: Error or Warning . |
false |
|
Output_RenderMode |
How to render console output: Auto , Ansi , ConsoleColor , Plaintext . |
false |
|
TestDrive_Enabled |
Enable TestDrive . |
false |
|
TestRegistry_Enabled |
Enable TestRegistry . |
false |
Output | Description |
---|---|
Outcome |
Outcome of the test run. |
Conclusion |
Conclusion status of test execution. |
Executed |
Indicates if tests were executed. |
Result |
Overall result (Passed , Failed ). |
FailedCount |
Number of failed tests. |
FailedBlocksCount |
Number of failed blocks. |
FailedContainersCount |
Number of failed containers. |
PassedCount |
Number of passed tests. |
SkippedCount |
Number of skipped tests. |
InconclusiveCount |
Number of inconclusive tests. |
NotRunCount |
Number of tests not run. |
TotalCount |
Total tests executed. |
The PSModule - SourceCode tests verifies the following coding practices that the framework enforces:
ID | Category | Description |
---|---|---|
NumberOfProcessors | General | Should use [System.Environment]::ProcessorCount instead of $env:NUMBER_OF_PROCESSORS . |
Verbose | General | Should not contain -Verbose unless it is explicitly disabled with :$false . |
OutNull | General | Should use $null = ... instead of piping output to Out-Null . |
NoTernary | General | Should not use ternary operations to maintain compatibility with PowerShell 5.1 and below. |
LowercaseKeywords | General | All PowerShell keywords should be written in lowercase. |
FunctionCount | Functions (Generic) | Each script file should contain exactly one function or filter. |
FunctionName | Functions (Generic) | Script filenames should match the name of the function or filter they contain. |
CmdletBinding | Functions (Generic) | Functions should include the [CmdletBinding()] attribute. |
ParamBlock | Functions (Generic) | Functions should have a parameter block (param() ). |
FunctionTest | Functions (Public) | All public functions/filters should have corresponding tests. |
The PSModule - Module tests verifies the following coding practices that the framework enforces:
Name | Description |
---|---|
Module Manifest exists | Verifies that a module manifest file is present. |
Module Manifest is valid | Verifies that the module manifest file is valid. |