Pester 测试用例失败时显示哈希表的内容

2023-12-12

Problem

When a Hashtable用作输入Should,Pester 只输出类型名而不输出内容:

Describe 'test' {
    It 'test case' {
        $ht = @{ foo = 21; bar = 42 }
        $ht | Should -BeNullOrEmpty
    }
}

Output:



Expected $null or empty, but got @(System.Collections.Hashtable).
  

预期输出如:



Expected $null or empty, but got @{ foo = 21; bar = 42 }.
  

Cause

看着纠缠源,测试输入由私有函数格式化Format-Nicely,它只是投射到String如果值类型是Hashtable。这归结为调用Hashtable::ToString(),它只输出类型名称。

解决方法

作为一种解决方法,我目前正在从中派生一个类Hashtable覆盖ToString方法。在将输入传递给之前Should,我将它投射到这个自定义类。这让 Pester 称我被覆盖ToString格式化测试结果时的方法。

BeforeAll {
    class MyHashTable : Hashtable {
        MyHashTable( $obj ) : base( $obj ) {}
        [string] ToString() { return $this | ConvertTo-Json }
    }
}

Describe 'test' {
    It 'test case' {
        $ht = @{ foo = 21; bar = 42 }
        [MyHashTable] $ht | Should -BeNullOrEmpty
    }
}

现在 Pester 输出HashtableJSON 格式的内容,这对我来说已经足够了。

Question

有没有更优雅的方式来自定义 Pester 输出Hashtable,这不需要我更改每个测试用例的代码?


有点黑客行为,覆盖 Pester 的私有Format-Nicelycmdlet 通过定义同名的全局别名来实现。

BeforeAll {
    InModuleScope Pester {
        # HACK: make private Pester cmdlet available for our custom override
        Export-ModuleMember Format-Nicely
    }

    function global:Format-NicelyCustom( $Value, [switch]$Pretty ) {
        if( $Value -is [Hashtable] ) {
            return $Value | ConvertTo-Json
        }
        # Call original cmdlet of Pester
        Pester\Format-Nicely $Value -Pretty:$Pretty
    }

    # Overrides Pesters Format-Nicely as global aliases have precedence over functions
    New-Alias -Name 'Format-Nicely' -Value 'Format-NicelyCustom' -Scope Global
}

这使我们能够像往常一样编写测试用例:

Describe 'test' {
    It 'logs hashtable content' {
        $ht = @{ foo = 21; bar = 42 }
        $ht | Should -BeNullOrEmpty
    }   

    It 'logs other types regularly' {
        $true | Should -Be $false 
    }
}

第一个测试用例的日志:



Expected $null or empty, but got @({
 "foo": 21,
 "bar": 42
}).
  

第二个测试用例的日志:



Expected $false, but got $true.
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pester 测试用例失败时显示哈希表的内容 的相关文章

  • 获取在特定日期之后修改的一组文件

    有没有人有一个方便的 powershell 脚本根据修改日期从 TFS 获取一组文件 我想说 给我这个文件夹 或子文件夹 中在 X Y ZZZZ 之后修改的所有文件 并将这些文件转储到它们通常所在的文件夹之外的文件夹中 我知道足够的 pow
  • 我应该安装哪个驱动程序才能使用 powershell 运行 mysqlcommand?

    我安装了 mysql 连接器 ODBC 5 1 8 来运行 sqlcommand 但出现此错误 Cannot find type MySql Data MySqlClient MySqlConnection make sure the as
  • 如何使用PowerShell批量调用Update-Database

    我们使用 Azure 弹性池生成多个客户端数据库和一个引用客户端数据库的主数据库 我们已经拥有多个数据库 并且正在开发新版本的代码 我们使用 EF6 代码优先 当我们更改模型 添加属性 时 我们创建迁移文件并需要调用Update Datab
  • 在 PowerShell 中提取 EXIF 数据的简单方法?

    我一直在研究使用 PowerShell 提取 EXIF 数据的各种方法 但到目前为止我发现它相当复杂 一些here http blog cincura net 233463 renaming files based on exif data
  • 如何根据事件触发SSRS订阅?

    有没有一种方法可以让我在共享文件夹中创建文件等事件时触发 SSRS 订阅 基于时间 我们可以使用 powershell 或 C 来实现吗 SSRS 中是否有可用的开箱即用功能 尽管我认为没有 我正在使用 SQL Server 2008 R2
  • 输入屏蔽密码

    我从其他帖子中拼凑了一个简单的例子 CmdletBinding DefaultParameterSetName Secret Param Parameter Mandatory True string FileLocation Parame
  • 如何在 Windows 7 上安装 ScheduledTasks 模块

    是否可以安装该模块 http technet microsoft com en us library jj649816 aspx与 Windows 8 和 Windows Server 2012 不同的操作系统上的 PS v3 0 附带吗
  • get-childItem 的新 -file 参数是像 -filter 一样快还是像 -include 一样慢?

    EDIT希望在这里澄清我的复杂和误导性问题 基于我错误的假设 file 接受输入 感谢您纠正我并指出这只是一个开关参数 我的示例中的输入实际上传递给 path 听起来这可能是搜索多种文件类型最快的纯 powershell 方式 因为 fil
  • Powershell 没有一些内置帮助主题

    我发现我的 powershell 没有一些帮助主题 例如about profiles 我试过update help但这没有帮助 有谁可以帮忙看一下吗 PS C gt systeminfo Host Name OS Name Microsof
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • Django 管理员 - 登录

    我正在建造一个Django Web App 与 Django Suit 用于管理界面 已经让 Python 2 7 Django 1 10 和 MySQL 和谐通信并启动了一个项目 python m django admin startpr
  • 带有 UiPath 的 Powershell

    我正在使用 UiPath 启动 PowerShell 脚本 我需要从 UiPath 传递一个参数 首先这可能吗 其次有人有这方面的例子吗 不确定 PowerShell 脚本中的语法是什么 是否可以将参数从 UiPath 传递到终端 您的 P
  • 获取对 SOAP 的 XML 响应中的节点值

    我在 PowerShell 中发出 SOAP 请求 如下所示 uri https secure echosign com services EchoSignDocumentService20 WSDL sun Invoke WebReque
  • 用于验证 IIS 设置的 Powershell 脚本

    是否可以使用 Power Shell 脚本获取 IIS 设置 我希望使用脚本获取 检查以下信息 检查 Windows 身份验证提供程序是否正确列出 协商 NTLM 检查是否启用了 Windows 身份验证 Windows 身份验证高级设置
  • 启动 psexec 后获取进程 ID

    我有一个使用 psexec 在远程计算机上调用记事本的脚本 有什么办法可以在启动后获取进程ID吗 这是我所拥有的 PCname MyPC SessionID 2 Program Notepad exe FilePath C temp Fil
  • 检查文件是否存在,然后移动它

    我正在尝试在 powershell 中编写几行代码 以检查文件是否到达特定文件夹 如果该文件存在 请将其复制到另一个文件夹 如果该文件不存在 则无需执行任何操作 到目前为止我只有复制部分 cd C Move y C myfolder csv
  • 在 React 应用程序的 shell 脚本中设置环境变量

    我正在尝试在 powershell 和 bash 脚本中设置一些环境变量 并在 ReactJS 应用程序中读取它们 shell脚本很简单 env AUTHDOMAIN some domain com env AUTHCLIENTID bun
  • 通过powershell脚本在WSL中运行bash脚本

    我正在尝试运行一个启动 WSL ubuntu1804 终端的脚本 然后在该终端中运行 bash 脚本 ubuntu1804 exe cd test directory node server js 然而 在第一个命令之后 终端打开 其他两个
  • 有没有更快的方法来使用Powershell解析Excel文档?

    我正在与一个接口MS Excel文件通过Powershell 每个 Excel 文档可能有大约 1000 行数据 目前这个脚本似乎读取了Excel文件并以每 0 6 秒 1 条记录的速率将值写入屏幕 乍一看 这似乎非常慢 这是我第一次阅读E
  • 使用 powershell 获取短路径

    我正在尝试在 powershell 中使用以下代码来获取短路径 对于某些文件夹它有效 对于某些人来说它不起作用 a New Object ComObject Scripting FileSystemObject f a GetFile C

随机推荐