使用 Pester 的 Mock Backup-DbaDatabase 不起作用

问题描述

我创建了一个 Powershell 函数,它使用 DBATools 模块中的 Backup-DBADatabase。它有一些额外的逻辑来创建一个框架,供其他人在整个公司内一致使用。因此,我想使用 pester 来模拟 Backup-DBADatabase 并在函数中测试我的其他逻辑。

我有两个问题让我困惑。

  1. 当我说“Mock -CommandName Test-Path { $False }”时,我的“Assert-VerifiableMock”仍然通过。如果我正确理解测试,它应该会失败

  2. 在本例中,Backup-DBADatabase 仍在执行中。

    Import-Module DBATools
    Function Backup-DBTemplate {
        [CmdletBinding(SupportsShouldProcess=$true)]
        Param (
            [Parameter(valueFromPipeline)]
                [string]$ServerInstance,[string]$DatabaseName,[string]$BackupDirectory
        )
        $FileExists = Test-Path "$BackupDirectory\$DatabaseName.bak" -Verbose:$VerbosePreference
    
        IF($FileExists ) {
            remove-item "$BackupDirectory\$DatabaseName.bak" -WhatIf:$WhatIfPreference -Verbose:$VerbosePreference
        }
        Backup-DbaDatabase -sqlInstance $ServerInstance -Path "$BackupDirectory" -Database $DatabaseName -FilePath "$DatabaseName.bak" -ReplaceInName -Checksum -copyOnly -IgnoreFileChecks -WhatIf:$WhatIfPreference -Verbose:$VerbosePreference
    }
    describe -Tag 'DBATools' 'Backup-DBTemplate' {
    
        Context "BackupDirectory file Exists" {
            Mock -CommandName Remove-Item -Verifiable
            mock -CommandName Test-Path { $true }
            Mock -ModuleName 'DBATools' -CommandName 'Backup-DbaDatabase'
    
            It 'Remove Backup if it exists' {
                Backup-DBTemplate -ServerInstance localhost -DatabaseName dbname -BackupDirectory C:\temp
                Assert-VerifiableMock 
            }
        }
        
    }

任何帮助将不胜感激。 谢谢,

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)