1
+ [CmdletBinding ()]
1
2
param (
3
+ [Parameter (Mandatory = $false )]
4
+ [ValidateNotNullOrEmpty ()]
2
5
[string ]$Tag = ' '
3
6
)
4
7
$MODULE_NAME = (Get-Item $PSScriptRoot / ../ ).Name
5
8
$MODULE_DIR = " $PSScriptRoot /../src/$MODULE_NAME "
6
- $MODULE_PATH = " $MODULE_DIR /$MODULE_NAME .psm1 "
9
+ $MODULE_MANIFEST = " $MODULE_DIR /$MODULE_NAME .psd1 "
7
10
8
11
Set-StrictMode - Version Latest
9
- $global :PesterDebugPreference_ShowFullErrors = $true
10
12
11
13
# Install Pester if needed
12
14
$pester = Get-Module Pester - ListAvailable - ErrorAction SilentlyContinue
13
15
$pesterMinVersion = [version ]' 4.0.0'
14
16
$pesterMaxVersion = [version ]' 4.10.1'
15
- if ( ! $pester -or ! ($pester.Version | ? { $_ -ge $pesterMinVersion -and $_ -le $pesterMaxVersion }) ) {
16
- if ($PSVersionTable.PSVersion.Major -ge 6 ) {
17
- Install-Module Pester - Force - Scope CurrentUser - MinimumVersion $pesterMinVersion - MaximumVersion $pesterMaxVersion - ErrorAction Stop
18
- }else {
19
- Install-Module Pester - Force - Scope CurrentUser - MinimumVersion $pesterMinVersion - MaximumVersion $pesterMaxVersion - SkipPublisherCheck - ErrorAction Stop
20
- }
17
+ if (! $pester -or ! ($pester.Version | ? { $_ -ge $pesterMinVersion -and $_ -le $pesterMaxVersion })) {
18
+ Install-Module Pester - Force - Scope CurrentUser - MinimumVersion $pesterMinVersion - MaximumVersion $pesterMaxVersion - ErrorAction Stop - SkipPublisherCheck
21
19
}
22
- Get-Module Pester - ListAvailable
20
+ Get-Module Pester | Remove-Module - Force
23
21
Import-Module Pester - MinimumVersion $pesterMinVersion - MaximumVersion $pesterMaxVersion - Force - ErrorAction Stop
22
+ Get-Module Pester
23
+
24
+ # Install RequiredModules if needed
25
+ $manifestObj = Invoke-Command - ScriptBlock ([scriptblock ]::Create((Get-Content $MODULE_MANIFEST - Encoding utf8 - Raw)))
26
+ if ($manifestObj.Contains (' RequiredModules' )) {
27
+ foreach ($m in $manifestObj [' RequiredModules' ]) {
28
+ $m = $m.Clone ()
29
+ $m [' Name' ] = $m [' ModuleName' ]
30
+ $m.Remove (' ModuleName' )
31
+ if (! (Get-InstalledModule @m - ErrorAction SilentlyContinue)) {
32
+ " Installing required module: $ ( $m [' Name' ] ) " | Write-Host - ForegroundColor Green
33
+ Install-Module @m - Force - Scope CurrentUser - ErrorAction Stop
34
+ }
35
+ Get-Module $m [' Name' ] - ListAvailable
36
+ }
37
+ }
38
+
39
+ # Test the module manifest
40
+ Test-ModuleManifest " $MODULE_MANIFEST " - ErrorAction Stop > $null
24
41
25
42
# Import our module
26
43
Get-Module " $MODULE_NAME " | Remove-Module - Force
27
- Import-Module $MODULE_PATH - Force - ErrorAction Stop
44
+ Import-Module $MODULE_MANIFEST - Force - ErrorAction Stop - Verbose
45
+ Get-Module " $MODULE_NAME "
28
46
47
+ $global :PesterDebugPreference_ShowFullErrors = $true # For Pester 4
29
48
if ($Tag ) {
30
49
# Run Unit Tests
31
50
$res = Invoke-Pester - Script $MODULE_DIR - Tag $Tag - PassThru - ErrorAction Stop
@@ -48,7 +67,7 @@ if ($Tag) {
48
67
" $ ( $res2.FailedCount ) integration tests failed." | Write-Host
49
68
}
50
69
51
- if (($res -and $res.FailedCount -gt 0 ) -or ($res2 -and $res2.FailedCount )) {
70
+ if (($res -and $res.FailedCount -gt 0 ) -or ($res2 -and $res2.FailedCount -gt 0 )) {
52
71
throw
53
72
}
54
73
}
0 commit comments