Tests/Module/ScriptAnalyzer.tests.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
. (Join-Path $PSScriptRoot '../TestCommon.ps1')

$scriptSources = Get-ChildItem -Path $script:FunctionPath -Filter '*.ps1' -Recurse
$excludeRuleList = @()

if (-Not (Get-Module PSScriptAnalyzer -ListAvailable)) {
    try {
        Write-Verbose "Trying to install PSScriptAnalyzer.."
        PowershellGet\Install-Module PSScriptAnalyzer -Scope CurrentUser -Force
    } catch {
        Write-Error $_
    }
}

if (-Not (Get-Module PSScriptAnalyzer -ListAvailable)) {
    Write-Warning "PSScriptAnalyzer module is not available. Skipping tests."
    return
}

Describe "Script Source analysis" {
    Import-Module PSScriptAnalyzer

    $scriptSources | ForEach-Object {
        Context "Source $($_.FullName)" {
            $results = Invoke-ScriptAnalyzer -Path $_.FullName -ErrorVariable $errors -ExcludeRule $excludeRuleList

            it "should have no errors" {
                $errors | Should BeNullOrEmpty
            }

            it "should not have warnings" {
                $results |
                Where-Object Severity -eq "Warning" |
                Should BeNullOrEmpty
            }

        }
    }
}