param( [Parameter(Mandatory = $true)] [string]$FileToTest, [Parameter(Mandatory = $false)] [switch]$Coverage, [Parameter(Mandatory = $false)] [switch]$Fast ) Write-Host "File to Test: $FileToTest" $FileToTest = Resolve-Path $FileToTest $fileName = Split-Path $FileToTest -leaf $filePath = Split-Path $FileToTest -Parent if ($fileName -like "*.tests.ps1") { $functionFile = $FileToTest -replace "\.tests\.ps1", ".ps1" $testFile = $FileToTest } else { $functionFile = $FileToTest $testFileName = $fileName -replace "\.ps1$", ".tests.ps1" $testFile = Join-Path $filePath $testFileName } Write-Host "Test File: $testFile" Write-Host "Function: $functionFile" if ($Coverage.IsPresent) { #$coverageFile = ($functionFile + ".coverage.xml") $coverageFile = Join-Path $PSScriptRoot "coverage.xml" Write-Host "Coverage File: $coverageFile" } $testArray = @{ Path = "$testFile"; Parameters = @{ TestSingleFile = $true; FunctionPath = $functionFile } } Write-Host "Test Parameters:" ($testArray | ConvertTo-JSON -Depth 3) Write-Host "" if ($null -eq $coverageFile) { Write-Host "Invoking: Invoke-Pester -Script <>" Invoke-Pester -Script $testArray } else { Write-Host "Invoking: Invoke-Pester -Script <> -CodeCoverage `"$functionFile`" -CodeCoverageOutputFile `"$coverageFile`"" Invoke-Pester -Script $testArray -CodeCoverage "$functionFile" -CodeCoverageOutputFile "$coverageFile" }