由于脚本阻止,无法达到100%Pester代码覆盖率

时间:2017-12-06 15:05:56

标签: powershell pester

大家好,

由于我的纠缠程序由于脚本块而无法达到100%的代码覆盖率,因此我一直在苦苦挣扎。我一直在研究和阅读文章没有成功,我已经决定向你们提供一些帮助。 :)

我想要描述的部分代码包含一个scriptblock,稍后会被提供给cmdlet Invoke-Command。示例代码如下:

function Get-Function {
.....
Set-Alias Start-PowerShell32 $env:computername\WindowsPowerShell\v1.0\powershell.exe"
$ScriptBlock = { 
    Start-PowerShell32 -noprofile { 
        $sample = Get-Content -Path "C:\sample.txt
        Import-Module "C:\Program Files (x86)\Software"

        @($sample) | Get-Service | Where-Object { $_.Status -eq 'Stopped' }
        }
    }
Invoke-Command -ScriptBlock $ScriptBlock
}

Describe Get-Function {
....
function Get-Statistics {

    Start-PowerShell32 -noprofile { 
        $sample = Get-Content -Path "C:\sample.txt
        Import-Module "C:\Program Files (x86)\Software"

        @($sample) | Get-Service | Where-Object { $_.Status -eq 'Stopped' }
        }
}
Context '1st Context'{
mock Set-Alias {'Setting alias for Powershell 32 bit'} -Verifiable
mock Get-Statistics {'Getting Statistics ....'} -Verifiable
mock Invoke-Command {Get-Statistics} -Verifiable
$result = Get-Function

    it 'should return etting alias for Powershell 32 bit'{
        $result[0] | should be "Setting alias for Powershell 32 bit"
        }
    it 'should return Getting Mailbox Statistics ....'{
        $result[1] | should be "Getting Statistics ...."
        }
    it 'should call all verifiable mocks'{
        Assert-VerifiableMocks
        }
    }
}

我在Pester上做的是我在Describe块(Get-Statistics)中创建了一个自定义函数,它基本上是脚本块的内部,每当我将Invoke-Command模拟为Get-Statistics时它就被调用。我的Pester成功,但代码覆盖率并没有给我100%。 你们能告诉我如何做到这一点吗?我需要更改测试吗? 谢谢

1 个答案:

答案 0 :(得分:0)

Describe {区块的头部,包含Invoke-Command的模拟:

Describe '..' {
    Mock Invoke-Command { Param($SB) . $SB }

    ...
}