作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Pester 测试一个 PowerShell 脚本,该脚本点源另一个脚本。当我尝试模拟点源函数时,Pester 拒绝使用模拟版本。当我尝试通过将函数添加到 .psm1 文件并使用 Import-Module 而不是点源来获取函数时,我遇到了同样的问题。
这是一个复制我遇到的问题的示例。所有 3 个文件都在同一个文件夹中。
文件.ps1
Function Invoke-Foo{
'Cantelope'
}
function Invoke-Bar {
. .\foo.ps1
Invoke-foo
}
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
. "$here\$sut"
. .\Foo.ps1
Describe "Bar" {
It "Mocks Foo" {
Mock Invoke-Foo {'Banana'}
Invoke-Bar | should be 'Banana'
}
}
Describing Bar
[-] Mocks Foo 36ms
Expected string length 6 but was 9. Strings differ at index 0.
Expected: {Banana}
But was: {Cantelope}
-----------^
9: Invoke-Bar | should be 'Banana'
at <ScriptBlock>, C:\Users\geinosky\Desktop\PingTest\Bar.tests.ps1: line 9
最佳答案
Invoke-Bar
明确点源 Invoke-Foo
从文件然后调用
它。点源函数隐藏其他定义的 Invoke-Foo
, 包含
mock 。
如果我们删除 . .\foo.ps1
来自 Invoke-Bar
然后 Pester 模拟工作,我们得到“香蕉”。
如果然后我们删除模拟然后所有工作,即找到所有命令,但我们得到“Cantelope”。
换句话说,如果你想要 Invoke-Foo
可以模拟然后不要在 Invoke-Bar
中点源它.Invoke-Bar
应该承担 Invoke-Foo
是预定义的(原始的或模拟的)并使用它。
关于unit-testing - Pester 不是模拟点源的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37950757/
我的项目结构如下: MyScript.ps1 classes\ Car.ps1 Tesla.ps1 Car.ps1 是 Tesla.ps1 的基类。我试图在 Tesla.ps1 中这样
下面是一些 PowerShell 代码: 测试.ps1: . C:\path\to\test2.ps1 exit 5 测试2.ps1: exit 7 从标准命令提示符运行 test.ps1,但您喜欢运
我是一名优秀的程序员,十分优秀!