tests/Repair-SqlOrphanUser.Tests.ps1
## This is a template file for the ScriptAnalyser tests for each command. ## It Should be named $CommandName.Tests.ps1 the capital T is important as is the . !! ## The help will be analysed via the inModuleHelp.Tests.ps1 file so you dont need to worry about that. ## Add you own functional tests to the end of this file ## When you are coding up your storm you can run all the tests using Invoke-Pester .\Tests from the root of the repo ## and then code to fix the tests ## or if you pass all the other tests and just want to work with this Tests file then you can use ## Invoke-Pester .\Tests\COMMANDNAMe.Tests.ps1 ## If you want to understand what the failed Script Analyser test means ## Run Invoke-ScriptAnalyser .\functions\COMMANDNAME.ps1 #Thank you Warren http://ramblingcookiemonster.github.io/Testing-DSC-with-Pester-and-AppVeyor/ if(-not $PSScriptRoot) { $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent } $Verbose = @{} if($env:APPVEYOR_REPO_BRANCH -and $env:APPVEYOR_REPO_BRANCH -notlike "master") { $Verbose.add("Verbose",$True) } $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace('.Tests.', '.') Import-Module $PSScriptRoot\..\functions\$sut -Force Import-Module PSScriptAnalyzer ## Added PSAvoidUsingPlainTextForPassword as credential is an object and therefore fails. ## We can ignore any rules here under special circumstances agreed by admins :-) ## We expect some context using comments about the reason for ignoring a rule $Rules = (Get-ScriptAnalyzerRule).Where{$_.RuleName -notin ('PSAvoidUsingPlainTextForPassword') } $Name = $sut.Split('.')[0] Describe 'Script Analyzer Tests' -Tag @('ScriptAnalyzer'){ Context "Testing $Name for Standard Processing" { foreach ($rule in $rules) { $i = $rules.IndexOf($rule) It "passes the PSScriptAnalyzer Rule number $i - $rule " { (Invoke-ScriptAnalyzer -Path "$PSScriptRoot\..\functions\$sut" -IncludeRule $rule.RuleName ).Count | Should Be 0 } } } } ## Load the command $ModuleBase = Split-Path -Parent $MyInvocation.MyCommand.Path # For tests in .\Tests subdirectory if ((Split-Path $ModuleBase -Leaf) -eq 'Tests') { $ModuleBase = Split-Path $ModuleBase -Parent } # Handles modules in version directories $leaf = Split-Path $ModuleBase -Leaf $parent = Split-Path $ModuleBase -Parent $parsedVersion = $null if ([System.Version]::TryParse($leaf, [ref]$parsedVersion)) { $ModuleName = Split-Path $parent -Leaf } else { $ModuleName = $leaf } # Removes all versions of the module from the session before importing Get-Module $ModuleName | Remove-Module # Because ModuleBase includes version number, this imports the required version # of the module $null = Import-Module $ModuleBase\$ModuleName.psd1 -PassThru -ErrorAction Stop Get-ChildItem "$Modulebase\internal\" |ForEach-Object {. $_.fullname} Describe "$Name Tests" -Tag @('Command'){ InModuleScope 'dbatools' { Context " There should be some functional tests here" { It "Does a thing" { $ActualValue | Should Be $ExpectedValue } }# Context }#modulescope }#describe |