问题标签 [pester]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1123 浏览

powershell - Where does Pester's Invoke-Pester reside?

According to this documentation it should be possible to measure code coverage using Pester.

0 投票
1 回答
325 浏览

powershell - 函数的管道输入

我有以下用于创建 HDInsight 群集的工作代码:

请注意,我正在使用流水线。现在我想编写一些自动化测试(使用Pester)来测试这段代码。为了做到这一点,我将 cmdlet 调用包装在我称之为代理函数的地方,并使用 splatting 传递参数值,这使得为了测试目的而模拟它们变得容易。这是一个例子:

当我尝试运行此代码时,出现错误:

Set-AzureHDInsightDefaultStorageProxy -StorageAccountName ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ [<<==>>] 例外:输入对象不能绑定到命令的任何参数,因为命令不接受管道输入,或者输入及其属性与接受管道输入的任何参数都不匹配。

好的,所以我需要修改我的函数以接受管道输入。我阅读了Write PowerShell Functions That Accept Pipelined Input并基于此我将代理函数重写为:

但同样的错误失败了。

显然,我缺乏 Powershell 技能/知识让我失望,所以我希望有人能告诉我如何重写我的函数以成功接受和使用管道输入。

这是我正在为其编写代理函数的 cmdlet 的定义:Set-AzureHDInsightDefaultStorage。我注意到 -Config 参数设置为允许管道输入: 在此处输入图像描述 所以我想我需要在代理函数中指定相同的参数,但我不知道该怎么做。

0 投票
1 回答
22117 浏览

powershell - 确定 PSCustomObject 的数组是否包含具有属性值的实例

我需要确定一个PSCustomObjects 数组是否包含其Title属性与值匹配的项目。我需要一个用于Pester断言的布尔值:

假设:

Contains不起作用:

Match返回匹配的实例,但它不是布尔值:

我想我可以:

有更好的选择吗?

0 投票
2 回答
1493 浏览

unit-testing - 如何使用 Pester 模拟匿名高级函数中的函数

我最近发现我不需要使用 Import-Module 来使用我的高级 powershell 函数,我可以在 ps1 文件中匿名定义一个函数。

不幸的是,我的 Pester 单元测试被破坏了。我似乎无法再在下面的清单中模拟对 New-Object 的调用了。通常,我会点源以下代码并在我的范围内定义函数 Get-StockQuote。现在点源 ps1 文件无济于事,因为无论如何我都通过文件名调用该函数。

如何使用 Pester 通过 New-Object 的模拟实现来测试以下代码?

注意:对于这个问题来说,这段代码显然是微不足道的,我正在使用的代码测试确实需要一个新对象的模拟实现。

0 投票
1 回答
100 浏览

powershell - 使用 Pester 测试非幂等 Web 方法

我正在尝试测试Set-PropertyValue设置 SharePoint 列表项的属性值的 PowerShell 命令 ( )。函数使用Invoke-WebMethod函数做实际工作。

我当前的Set-PropertyValue.Test.ps1文件:

我不喜欢这个有几个原因:

  • 外部依赖Get-PropertyValue
  • 没有测试隔离;对 SharePoint 列表进行了更改
  • 可能将列表项置于不良状态
  • 测试没有结构化以轻松测试多个属性,也许是在一个循环中

有没有更好的方法来测试这个?

0 投票
2 回答
1282 浏览

powershell - 远程安装和调用 Pester

我是 PowerShell、Pester新的 VSO 构建系统的新手,我正在尝试让 Pester 为每次签入运行我的测试。我已经设置并配置了一个简单的 PowerShell 脚本以在每次签入时运行。

已配置 PowerShell

我首先简单地尝试了 Invoke-Pester 以查看 VSO 团队是否已经设想到这一点并设置了通用单元测试框架,但我得到了以下可预测的结果:

我尝试使用 PSGet:

但这也不起作用:

如何远程安装和执行 Pester 来运行我的单元测试?

0 投票
2 回答
1842 浏览

unit-testing - 模拟一个命令,根据 Mock 被调用的次数得到不同的结果

我正在使用 Pester 对我编写的一些代码进行单元测试。在我Test-Path使用参数过滤器模拟的测试中:

以下是我正在做的伪代码:

在第一次打电话给Test-Path我想回来$false,在第二次打电话给我想回来$true。我可以想到几种方法来实现这一点,但他们感觉不对:

  1. 第一次调用使用Path参数,第二次使用LiteralPath。有两个模拟一个ParameterFilter,每个模拟一个。我不喜欢为了方便测试而修改代码的想法。

  2. 创建一个带有参数的函数:PathInstanceNumber。为函数创建模拟。这比上面的要好,但是我不喜欢仅出于测试目的而使用参数的想法。

我已经看过并且找不到基于第 n 个调用来模拟的方法。Pester 是否促进了这一点,而我只是错过了它?如果没有,是否有更清洁的方法来实现我想要的?

0 投票
1 回答
700 浏览

powershell - 使用 pester 测试 powershell DSC 脚本类 - 找不到类型 [ClassName]

我正在尝试在 Pester 的帮助下测试一些编写为类的自定义 DSC 资源。但是,我正在努力研究如何使该类可用于不同的文件。这真的不是一个麻烦的问题,我也不能在 powershell 中做到这一点。我有一个带有类的模块,类似于 SxDeployment.psm1 文件中的以下内容

该模块有一个对应的 .psd1,它将 SxWindowsService 类列为“DscResourcesToExport”。它被注册为一个模块,当我执行 Get-Module -ListAvailable 时我可以看到这个模块,并且还可以对其执行 Import-Module。

我想我的问题真的是如何从另一个文件创建对此类的引用?

假设我有一个不同的文件 test.ps1 具有以下内容

我收到以下错误,“无法找到类型 [SxWindowsService]。”

更新 经过一番修改后,我可以通过将 .psm1 文件更改为 .ps 文件并将 import-module 语句更改为 .psm1 文件来创建该类的实例。.\SxDeployment.ps1。所以看起来问题是如何使用 DSC 配置之外的 DSC 资源模块文件中定义的资源?

0 投票
1 回答
101 浏览

unit-testing - CallHistory 中的 Pester BoundParams 为空

我有一个简单的,此时不做任何事情,我才刚刚开始使用 Pester,但我的目标是模拟 Remove-ADGroupMember 和其他一些 AD PowerShell 命令进行测试。

和我的测试脚本

第一Assert-MockCalled行有效,但无论我在第二行上尝试什么,测试总是失败。过了一会儿,我用调试器挖掘了 Assert-MockCalled 函数,看起来 -Members 参数的值正在丢失

在此处输入图像描述

在上图中,我在 Mock.ps1 的 Assert-MockCalled 函数中,您可以看到传递给成员的值丢失了。如果我只像这样将 1 个值传递给 Remove-ADGroupMember 模拟:Remove-ADGroupMember -Identity "dale" -Members "dale"我在 BoundParams 中看到的值{}不是{, }您在屏幕截图中看到的。

这是我这样做的方式的问题,还是纠缠者从 Remove-ADGroupMember 读取参数等的方式的问题?

0 投票
2 回答
882 浏览

powershell - 使用 Pester 测试 PowerShell 模块,我的模拟函数不返回值

我正在使用 Pester,一个 PowerShell 测试库来帮助 TDD/单元测试覆盖。

我正在尝试模拟 Get-ChildItem 以进行我在应该进行环境设置的模块中的测试。如果我让我的模拟 Get-ChildItem 函数返回一个纯字符串,它工作正常,但如果我让它返回这个数组,它不会返回任何东西。

在被测代码中,我设置了一个断点并调用了模拟的 Get-ChildItem 并且可以看出有些不同。

当使用字符串模拟调用它时 - 一切都很好。

当使用数组模拟调用它时 - 它什么也不返回,甚至不返回文件和目录的标准列表。所以看起来模拟正在做某事。

我试图弄清楚为什么 Get-ChildItem 没有返回我的 DirectoryInfo 项目数组。

谢谢!

编辑:当我改变时:

返回不同的文字:

我被测系统中的调用开始返回预期值,与返回纯字符串相同。

使用前导逗号不起作用,并且投射应该是呼叫也不起作用。